Tuesday, March 09, 2016
En este capítulo se revisaran importantes tareas de la gestion de datos, incluyendo su estructura, creación de variables y manipulación de datos. Se estudiaran funciones de los paquetes dplyr y tidyr
with(ds, mean(D))
## [1] 11.11765
mean(ds$D)
## [1] 11.11765
La primera instrucción indica que dentro del dataframe ds calcule la media de la variable D, mientras que la segunda instrucción utiliza el operador $ para indicar que del dataframe ds calcule la media de la variable D.
Hay situaciones en el que se desea conocer el nombre de las variables y su tipo dentro del dataframe para ello usamos el comando:
str(ds)
## Classes 'tbl_df', 'tbl' and 'data.frame': 17 obs. of 14 variables:
## $ id : num 10 11 12 13 14 15 16 17 18 19 ...
## $ B : num 542 655 701 606 440 ...
## $ C : num 1 0 0 2 0 0 2 0 5 0 ...
## $ D : num 1 1 8 8 8 1 1 1 12 13 ...
## $ E : num 54.2 59.6 58.5 46.6 31.4 ...
## $ CEDULA: chr "V-18659730" "V-18659731" "V-18659732" "V-18659733" ...
## $ G : num 7 11 14 44 26 26 23 18 33 37 ...
## $ H : num 5 12 99 97 55 12 12 82 92 104 ...
## $ I : num 0 0 13 0 0 0 0 0 8 14 ...
## $ J : num 1 0 4 4 4 4 4 4 4 5 ...
## $ K : num 1 0 0 0 0 0 0 0 0 2 ...
## $ L : num 378 649 812 2024 806 ...
## $ Fecha : POSIXct, format: "1988-06-11" "1994-07-19" ...
## $ N : num 54 59 58 46 31 43 43 63 45 45 ...
Se pueden utilizar el comando [,] para seleccionar mediante los indices de las columnas o filas los datos que se deseen de la matriz, seleccionemos las primeras 10 filas y todas las columna:
ds[1:10,]
## id B C D E CEDULA G H I J K L Fecha N
## 1 10 542.2583 1 1 54.22583 V-18659730 7 5 0 1 1 378 1988-06-11 54
## 2 11 655.1672 0 1 59.56066 V-18659731 11 12 0 0 0 649 1994-07-19 59
## 3 12 701.4933 0 8 58.45777 V-18659732 14 99 13 4 0 812 2016-04-12 58
## 4 13 605.9284 2 8 46.60988 V-18659733 44 97 0 4 0 2024 1958-09-04 46
## 5 14 439.8299 0 8 31.41642 V-18659734 26 55 0 4 0 806 1987-12-28 31
## 6 15 648.0743 0 1 43.20495 V-18659735 26 12 0 4 0 1118 1987-12-29 43
## 7 16 691.2792 2 1 43.20495 V-18659736 23 12 0 4 0 989 1987-12-30 43
## 8 17 1086.6385 0 1 63.91991 V-18659737 18 82 0 4 0 1134 1987-12-31 63
## 9 18 820.0096 5 12 45.55609 V-18659738 33 92 8 4 0 1485 1988-01-01 45
## 10 19 1011.4978 0 13 45.55609 V-18659739 37 104 14 5 2 1665 1988-01-02 45
Por otra parte se pueden seleccionar todas las filas, en este caso filtremos sólo la segunda columna:
ds[,2]
## [1] 542.2583 655.1672 701.4933 605.9284 439.8299 648.0743 691.2792
## [8] 1086.6385 820.0096 1011.4978 1059.2216 1112.1827 791.4187 965.9232
## [15] 1254.7741 1317.3702 1516.7795
Igualmente se pueden seleccionar un conjunto de columnas escogamos la segunda, cuarta y séptima:
ds[,c(2,4,7)]
## B D G
## 1 542.2583 1 7
## 2 655.1672 1 11
## 3 701.4933 8 14
## 4 605.9284 8 44
## 5 439.8299 8 26
## 6 648.0743 1 26
## 7 691.2792 1 23
## 8 1086.6385 1 18
## 9 820.0096 12 33
## 10 1011.4978 13 37
## 11 1059.2216 14 37
## 12 1112.1827 15 8
## 13 791.4187 16 37
## 14 965.9232 17 3
## 15 1254.7741 18 24
## 16 1317.3702 25 19
## 17 1516.7795 30 7
Se pueden excluir filas o columnas anteponiendo el signo “-” en el vector de columnas que se desean eliminar:
ds[-c(2,4,7),]
## id B C D E CEDULA G H I J K L Fecha N
## 1 10 542.2583 1 1 54.22583 V-18659730 7 5 0 1 1 378 1988-06-11 54
## 3 12 701.4933 0 8 58.45777 V-18659732 14 99 13 4 0 812 2016-04-12 58
## 5 14 439.8299 0 8 31.41642 V-18659734 26 55 0 4 0 806 1987-12-28 31
## 6 15 648.0743 0 1 43.20495 V-18659735 26 12 0 4 0 1118 1987-12-29 43
## 8 17 1086.6385 0 1 63.91991 V-18659737 18 82 0 4 0 1134 1987-12-31 63
## 9 18 820.0096 5 12 45.55609 V-18659738 33 92 8 4 0 1485 1988-01-01 45
## 10 19 1011.4978 0 13 45.55609 V-18659739 37 104 14 5 2 1665 1988-01-02 45
## 11 20 1059.2216 0 14 53.23672 V-18659740 37 104 14 5 2 1961 1988-01-03 53
## 12 21 1112.1827 0 15 52.96108 V-18659741 8 0 0 0 0 416 1988-01-04 52
## 13 22 791.4187 2 16 35.97358 V-18659742 37 88 0 2 0 1295 1988-01-05 35
## 14 23 965.9232 0 17 41.99666 V-18659743 3 17 0 3 2 123 1988-01-06 41
## 15 24 1254.7741 0 18 52.28225 V-18659744 24 85 0 8 1 1248 1988-01-07 52
## 16 25 1317.3702 8 25 52.69481 V-18659745 19 83 0 6 0 988 1988-01-08 52
## 17 26 1516.7795 9 30 58.33767 V-18659746 7 30 0 5 0 406 1988-01-09 58
Para esto hay que cargar el paquete dplyr y su respectiva libreria.
Hay dos formas de añadir variables, con el comando mutate, donde definiremos la variable Z a partir de la suma de las columnas “C” y “D”:
ds = mutate(ds, Z=C+D)
o por medio del comando “with”, con el cual hay que tener en cuenta que el nombre de la nueva variable se debe indicar luego del nombre de la data acompañado por “$”, en este caso vamos a llamarla “New”
ds$New = with(ds,D*100)
Se hace con el comando “rename()” el cual es una función de la libreria “dplyr”
ds = rename(ds, new1=C, new2=D) # indica que las variables C y D, han sido renombradas como new1 y new2 respectivamente
o con el comando names()
names(ds)[names(ds)=="Z"] = "new3" #Indica que buscará los nombres de las columnas de ds y el que reciba el nombre Z será renombrado como new3
colnames(ds)<-c("v1","v2","v3","v4","v5","v6","v7","v8","v9","va","vb","vc","vd","ve","vf","vg") # Esta opción es para cambiar los nombres en el encabezado de columnas
Inicialmente creemos un vector con tres valores numéricos por medio del comando “as. numeric” y verifiquemos que tipo de valores se encuentran el el vector que creamos por medio del comando “typeof()”
numericx=as.numeric(c(1,2,3))
numericx
## [1] 1 2 3
typeof(numericx)
## [1] "double"
Por otra parte vamos a convertir los valores del vector numérico creado anteriormente en caracteres, esto por medio del comando “as.character” y al igual que en el caso anterior verifiquemos que efectivamente son caracteres, en este caso cuando se muestran los valores estarán indicados entre comillas ya que son cadenas.
stringx = as.character(numericx)
stringx
## [1] "1" "2" "3"
typeof(stringx)
## [1] "character"
En este caso vamos a convertir unos valores de tipo cadena o texto en valores numéricos con los comandos vistos anteriormente:
numericx = as.numeric(stringx)
typeof(stringx)
## [1] "character"
typeof(numericx)
## [1] "double"
O incluso puede convertirse los valores en factores o niveles por medio del comando “factor”
stringf = factor(stringx)
typeof(stringf)
## [1] "integer"
stringf
## [1] 1 2 3
## Levels: 1 2 3
Para extraer caracteres se utiliza una función muy parecida a la utilizada en excel, de tal manera de indicar desde que punto se quiere comenzar a extraer los caracteres y cuantos caracteres se van a extraer
x="123456789"
get2through4 = substr(x, start=2, stop=4)
get2through4
## [1] "234"
len = nchar(x)
len
## [1] 9
x1="ab"
x2="cd"
newcharvar = paste(x1, " VAR2 ", x2, sep="") # Para concatenar string se usa la función paste cuyos argumentos son las cadenas que se desean concatenar, la opción sep es para indicar que tipo de separación se desea
newcharvar
## [1] "ab VAR2 cd"
Para saber si un elemento pertenece a un conjunto de datos, se usa el operador %in%
newengland = c("MA", "CT", "RI", "VT", "ME", "NH")
"NY" %in% newengland
## [1] FALSE
"MA" %in% newengland
## [1] TRUE
Dividir string se logra usando el comando strsplit
x = "this is a test"
strsplit(x, " ")
## [[1]]
## [1] "this" "is" "a" "test"
Se usa la instrucción gsub cuyas primera y segunda entrada indican la cadena a reemplazar y por cual será reemplazada, respectivamente
oldstring= "MonaBella"
newstring = gsub("Bella", "Hermosa", oldstring)
ds$v6<- gsub("-","",paste(ds$v6))
Cuando se desee tener todas las letras de una cadena en minúsculas o mayúsculas, se usan los comandos tolower() y toupper() respectivamente
x="AbcDFGhiklZ"
lowercasex = tolower(x)
lowercasex
## [1] "abcdfghiklz"
lowercasex = chartr("ABCDEFGHIJKLMNOPQRSTUVWXYZ",
"abcdefghijklmnopqrstuvwxyz", x)
toupper(x)
## [1] "ABCDFGHIKLZ"
Filtrado de filas es una función de la libreria dplyr, la primera posición de filter() indica la data a filtrar y la segunda posición la condición de filtrado.
#ibrary(dplyr)
smallds = filter(ds,v3==0)
También se puede usar la función subset(), cuya primera entrada indica de que data se tomará un subconjunto y la segunda entrada la condición
smallds1= subset(ds,v3==1)
-Colocar o mantener variables en un dataframe
Para mantener filas en una dataframe
#ibrary(dplyr)
narrow = select(ds,v1, v2)
#o
narrow1= ds[,c("v1", "v6")]
#o
narrow2= subset(ds, select = c(v1, v2))
Se pueden combinar con las funciones starts_with(), ends_with(), contains(), entre otras.
#install.packages("mosaic",dependencies = TRUE)
#install.packages("car",dependencies = TRUE)
#install.packages("pbkrtest",dependencies = TRUE)
library(mosaic)
newds = resample(ds, size=2, replace=FALSE) #Por defecto el muestreo se hace sin reemplazo, en caso de quere reemplezar colocar replace=TRUE
#o
newds1 = ds[sample(nrow(ds), size=2),] # Para obtener una selección aleatoria del numero de filas
library(dplyr)
ds = data.frame(y = c("abc", "def", "ghi")) # Se crea un data frame
ds = mutate(ds, id = 1:nrow(ds)) # El comando mutate se usa para crear una variable en el dataframe a partir de otra variable de este
ds
## y id
## 1 abc 1
## 2 def 2
## 3 ghi 3
length(ds)
## [1] 2
dim(ds)
## [1] 3 2
La función unique() devuelve cada uno de los valores únicos representados por el vector o dataframe indicado por x
x=c(1,2,2,3,4,3,4,3)
y=c(1,2,2,3,3,3,3,3)
uniquevalues = unique(x)
uniquevalues = unique(data.frame(x,y))
La función de duplicated() devuelve un vector lógico que indica un valor replicado, la primera ocurrencia no es un valor duplicado
duplicated(x)
## [1] FALSE FALSE TRUE FALSE FALSE TRUE TRUE TRUE