forked from joanby/r-basic
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTema5.Rmd
More file actions
229 lines (157 loc) · 11.1 KB
/
Copy pathTema5.Rmd
File metadata and controls
229 lines (157 loc) · 11.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
---
title: Tema 5 - Data frames
author: Juan Gabriel Gomila & María Santos
output:
ioslides_presentation:
widescreen: true
css: JB_style.css
logo: Imgs/LogoCurso.png
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE, comment = NA)
```
##Data frames
<l class="definition">Data frame.</l> Un data frame es una tabla de doble entrada, formada por variables en las columnas y observaciones de estas variables en las filas, de manera que cada fila contiene los valores de las variables para un mismo caso o un mismo individuo.
- `data()`: para abrir una ventana con la lista de los objetos de datos a los que tenemos acceso en la sesión actual de R (los que lleva la instalación básica de R y los que aportan los paquetes que tengamos cargados.
- Si entramos `data(package=.packages(all.available = TRUE))` obtendremos la lista de todos los objetos de datos a los que tenemos acceso, incluyendo los de los paquetes que tengamos instalados, pero que no estén cargados en la sesión actual.
## Obteniendo información del data frame
- `head(d.f,n)`: para mostrar las $n$ primeras filas del data frame. Por defecto se muestran las 6 primeras filas
- `tail(d.f,n)`: para mostrar las $n$ últimas filas del data frame. Por defecto semuestran las 6 últimas
- `str(d.f)`: para conocer la estructura global de un data frame
- `names(d.f)`: para producir un vector con los nombres de las columnas
## Obteniendo información del data frame
```{r}
str(Orange)
```
## Obteniendo información del data frame
```{r}
head(Orange,4)
tail(Orange,4)
```
## Obteniendo información del data frame
- `rownames(d.f)`: para producir un vector con los identificadores de las filas
- R entiende siempre que estos identificadores son palabras, aunque sean números, de ahí que los imprima entre comillas
- `colnames(d.f)`: para producir un vector con los identificadores de las columnas
- `dimnames(d.f)`: para producir una list formada por dos vectores (el de los identificadores de las filas y el de los nombres de las columnas)
- `nrow(d.f)`: para consultar el número de filas de un data frame
- `ncol(d.f)`: para consultar el número de columnas de un data frame
- `dim(d.f)`: para producir un vector con el número de filas y el de columnas
## Obteniendo información del data frame
- `d.f$nombre_variable`: para obtener una columna concreta de un dataframe
- El resultado será un vector o un factor, según cómo esté definida la columna dentro del data frame
- Las variables de un data frame son internas, no están definidas en el entorno global de trabajo de R
## Sub-data frames
- `d.f[n,m]`: para extraer “trozos” del data frame por filas y columnas (funciona exactamente igual que en matrices) donde $n$ y $m$ pueden definirse como:
- intervalos
- condiciones
- números naturales
- no poner nada
- Si sólo queremos definir la subtabla quedándonos con algunas variables, basta aplicar el nombre del data frame al vector de variables
- Estas construcciones se pueden usar también para reordenar las filas o columnas
## Sub-data frames
```{r}
dataOrange = Orange
dataOrange[c(10:12),]
dataOrange[c(2,17),c(1,3)]
```
## Sub-data frames
```{r}
dataOrange[2,3]
dataOrange[dataOrange$circumference<=50,]
```
## Leyendo tablas de datos
- `read.table()`: para definir un data frame a partir de una tabla de datos contenida en un fichero
- Este fichero puede estar guardado en nuestro ordenador o bien podemos conocer su url. Sea cual sea el caso, se aplica la función al nombre del fichero o a la dirección entre comillas
Aquí tenéis una [lista de data frames](http://www.public.iastate.edu/~maitra/stat501/datasets.html) para practicar
## Parámetros de read.table()
- `header = TRUE`: para indicar si la tabla que importamos tiene una primera fila con los nombres de las columnas. El valor por defecto es FALSE
- `col.names = c(...)`: para especificar el nombre de las columnas. No olvidéis que cada nombre debe ir entre comillas
- `sep`: para especificar las separaciones entre columnas en el fichero (si no es un espacio en blanco). Si es así, hay que introducir el parámetro pertinente entre comillas
- `dec`: para especificar el signo que separa la parte entera de la decimal (si no es un punto. Si es así, hay que introducir el parámetro pertinente entre comillas
## Parámetros de read.table()
```{r}
students = read.table("http://www.public.iastate.edu/~maitra/stat501/datasets/morel.dat",
col.names = c("technicalDisciplines","aptitude","maths", "language",
"generalKnowledge"))
head(students,8)
```
## Más parámetros de read.table()
- `stringsAsFactors`: para prohibir la transformación de las columnas de palabras en factores debemos usar `stringsAsFactors=FALSE` (ya que por defecto, R realiza dicha transformación)
- Para importar un fichero de una página web segura (cuyo url empiece con https),
no podemos entrar directamente la dirección en `read.table()`; una solución es instalar y cargar el paquete RCurl y entonces usar la instrucción `read.table (textConnection(getURL(“url ”)),...)`.
## Leyendo diferentes tipos de fichero
- `read.csv()`: para importar ficheros en formato CSV
- `read.xls()` o `read.xlsx()`: para importar hojas de cálculo tipo Excel u OpenOffice en formato XLS o XLSX, respectivamente. Se necesita el paquete xlsx
- `read.mtb()`: para importar tablas de datos Minitab. Se necesita el paquete foreign
- `read.spss()`: para importar tablas de datos SPSS. Se necesita el paquete foreign
## Exportando datos a ficheros
- `write.table(df, file = "")`: para exportar un data frame a un fichero
- `file = ""`: es donde indicaremos el nombre que queremos darle al fichero
- Podemos usar el parámetro `sep` para indicar el símbolo de separación de columnas. Siempre entre comillas
- También podemos utilizar el parámetro `dec` para indicar la separación entre la parte entera y decimal de los datos
## Exportando datos a ficheros
```{r}
write.table(students, file = "../data/StudentsData", dec = ".")
students2 = read.table("../data/StudentsData", header = TRUE)
str(students2)
```
## Construyendo data frames
- `data.frame(vector_1,...,vector_n)`: para construir un data frame a partir de vectores introducidos en el orden en el que queremos disponer las columnas de la tabla
- R considera del mismo tipo de datos todas las entradas de una columna de un data frame
- Las variables tomarán los nombres de los vectores. Estos nombres se pueden especificar en el argumento de `data.frame` entrando una construcción de la forma `nombre_variable = vector`
- `rownames`: para especificar los identificadores de las filas
- También en esta función podemos hacer uso del parámetro `stringsAsFactors` para evitar la transformación de las columnas de tipo palabra en factores
## Construyendo data frames
```{r}
Algebra = c(1,2,0,5,4,6,7,5,5,8)
Analysis = c(3,3,2,7,9,5,6,8,5,6)
Statistics = c(4,5,4,8,8,9,6,7,9,10)
grades = data.frame(Alg = Algebra, An = Analysis, Stat = Statistics)
str(grades)
```
## Construyendo data frames
- `fix(d.f)`: para crear / editar un data frame con el editor de datos
- `names(d.f)`: para cambiar los nombres de las variables
- `rownames(d.f)`: para modificar los identificadores de las filas. Han de ser todos diferentes
- `dimnames(d.f)=list(vec_nom_fil, vec_nom_col)`: para modificar el nombre de las filas y de las columnas simultáneamente
## Construyendo data frames
- `d.f[núm_fila,] = c(...)`: para añadir una fila a un data frame
- Las filas que añadimos de esta manera son vectores, y por tanto sus entradas han de ser todas del mismo tipo
- Si no añadimos las filas inmediatamente siguientes a la última fila del data frame, los valores entre su última fila y las que añadimos quedarán no definidos y aparecerán como NA
- Para evitar el problema anterior, vale más usar la función `rbind()` para concatenar el data frame con la nueva fila
## Construyendo data frames
```{r}
Calculus = c(5,4,6,2,1,0,7,8,9,6)
grades2 = cbind(grades, Calculus)
head(grades2)
```
## Construyendo data frames
- `d.f$new_var`: para añadir una nueva variable al data frame
- Podemos concatenar columnas con un data frame existente mediante la función `cbind()`. De este modo se puede añadir la columna directamente sin necesidad de convertirla antes a data frame
- Esta nueva variable ha de tener la misma longitud que el resto de columnas del data frame original. Si no, se añadirán valores NA a las variables del data frame original o a la nueva variable hasta completar la misma longitud
## Cambiando los tipos de datos
- `as.character`: para transformar todos los datos de un objeto en palabras
- `as.integer`: para transformar todos los datos de un objeto a números enteros
- `as.numeric`: para transformar todos los datos de un objeto a números reales
## Más sobre sub-data frames
- `droplevels(d.f)`: para borrar los niveles sobrantes de todos los factores, ya que las columnas que son factores heredan en los sub-data frames todos los niveles del factor original, aunque no aparezcan en el trozo que hemos extraído
- `select(d.f, parámetros)`: para especificar que queremos extraer de un data frame
- `starts_with("x")`: extrae del data frame las variables cuyo nombre empieza con la palabra "x"
- `ends_with("x")`: extrae del data frame las variables cuyo nombre termina con la palabra "x"
- `contains("x")`: extrae del data frame las variables cuyo nombre contiene la palabra "x"
- Se necesita el paquete `dplyr` o mejor aún `tidyverse`
## Más sobre sub-data frames
- `subset(d.f,condición,select = columnas)`: para extraer del data frame las filas que cumplen la condición y las columnas especificadas
- Si queremos todas las filas, no hay que especificar ninguna condición
- Si queremos todas las columnas, no hace especificar el parámetro `select`
- Las variables en la condición se especifican con su nombre, sin añadir antes el nombre del data frame
## Aplicando funciones a data frames
- `sapply(d.f, función)`: para aplicar una función a todas las columnas de un data frame en un solo paso
- `na.rm=TRUE`: para evitar que el valor que devuelva la función para las columnas que contengan algún NA sea NA
- `aggregate(variables~factors,data=d.f,FUN=función)`: para aplicar una función a variables de un data frame clasificadas por los niveles de un, o más de un, factor
- Si queremos aplicar la función a más de una variable, tenemos que agruparlas con un `cbind`
- Si queremos separar las variables mediante más de un factor, tenemos que agruparlos con signos $+$
## Variables globales
- `attach(d.f)`: para hacer que R entienda sus variables como globales y que las podamos usar por su nombre, sin necesidad de añadir delante el nombre del data frame y el símbolo $
- Si ya hubiera existido una variable definida con el mismo nombre que una variable del data frame al que aplicamos `attach`, hubiéramos obtenido un mensaje de error al ejecutar esta función y no se hubiera reescrito la variable global original
- `detach(d.f)`: para devolver la situación original, eliminando del entorno global las variables del data frame