la “biblioteca” compilada Uno de los paquetes más importantes en R es el paquete tidyr . El único propósito del paquete tidyr es simplificar el proceso de creación de datos ordenados. Tidy data describe una forma estándar de almacenar datos que se utiliza siempre que sea posible en todo el tidyverse . Si una vez se asegura de que sus datos estén ordenados, pasará menos tiempo golpeando con las herramientas y más tiempo trabajando en su análisis.
Instalación
Para usar un paquete en la programación R, primero debe instalar el paquete. Esta tarea se puede realizar mediante el comando . Para instalar todo el paquete tidyverse , escribe esto:
install.packages("tidyverse")
Alternativamente, para instalar solo el paquete tidyr , escriba esto:
install.packages("tidyr")
Para instalar la versión de desarrollo desde GitHub, escriba esto:
# install.packages("devtools") devtools::install_github("tidyverse/tidyr")
Funciones verbales importantes en el paquete tidyr
El conjunto de datos:
Antes de pasar a la importante función del verbo, preparemos primero el conjunto de datos. Defina un conjunto de datos tidy_dataframe que contenga datos sobre la frecuencia de personas en un grupo en particular.
R
# load the tidyr package library(tidyr) n = 10 # creating a data frame tidy_dataframe = data.frame( S.No = c(1:n), Group.1 = c(23, 345, 76, 212, 88, 199, 72, 35, 90, 265), Group.2 = c(117, 89, 66, 334, 90, 101, 178, 233, 45, 200), Group.3 = c(29, 101, 239, 289, 176, 320, 89, 109, 199, 56)) # print the elements of the data frame tidy_dataframe
Producción:
S.No Group.1 Group.2 Group.3 1 1 23 117 29 2 2 345 89 101 3 3 76 66 239 4 4 212 334 289 5 5 88 90 176 6 6 199 101 320 7 7 72 178 89 8 8 35 233 109 9 9 90 45 199 10 10 265 200 56
El paquete tidyr proporciona varias funciones importantes que se pueden usar para la limpieza de datos. Esos son:
- función: toma varias columnas y las reúne en pares clave-valor. Básicamente, hace que los datos «anchos» sean más largos. La función tomará varias columnas y las colapsará en pares clave-valor, duplicando todas las demás columnas según sea necesario.
Sintaxis:
reunir (datos, clave = «clave», valor = «valor», …, na.rm = FALSO, convertir = FALSO, factor_clave = FALSO)
Parámetro |
Descripción |
datos | el marco de datos. |
valor clave |
los nombres de las nuevas columnas de clave y valor, como strings o como símbolos. |
……. |
la selección de columnas. Si se deja vacío, se seleccionan todas las variables. Puede proporcionar nombres de variables simples, seleccionar todas las variables entre x y z con x:z, excluye y con -y. |
na.rm | si se establece en TRUE, eliminará las filas de la salida donde la columna de valor es NA. |
convertir |
se establece en VERDADERO, ejecutará automáticamente type.convert() en la columna clave. Esto es útil si los tipos de columna son realmente numéricos, entero o lógico. |
factor_clave |
si es FALSO, el valor predeterminado, los valores clave se almacenarán como un vector de caracteres. Si es VERDADERO, se almacenará como un factor, que conserva el orden original de las columnas. |
Ejemplo:
Ahora, para una mejor comprensión, haremos que nuestros datos sean largos con función.
R
# using gather() function on tidy_dataframe long <- tidy_dataframe %>% gather(Group, Frequency, Group.1:Group.3) # print the data frame in a long format long
Producción:
S.No Group Frequency 1 1 Group.1 23 2 2 Group.1 345 3 3 Group.1 76 4 4 Group.1 212 5 5 Group.1 88 6 6 Group.1 199 7 7 Group.1 72 8 8 Group.1 35 9 9 Group.1 90 10 10 Group.1 265 11 1 Group.2 117 12 2 Group.2 89 13 3 Group.2 66 14 4 Group.2 334 15 5 Group.2 90 16 6 Group.2 101 17 7 Group.2 178 18 8 Group.2 233 19 9 Group.2 45 20 10 Group.2 200 21 1 Group.3 29 22 2 Group.3 101 23 3 Group.3 239 24 4 Group.3 289 25 5 Group.3 176 26 6 Group.3 320 27 7 Group.3 89 28 8 Group.3 109 29 9 Group.3 199 30 10 Group.3 56
- función: Convierte datos más largos a un formato más amplio. La función convierte una columna de un solo carácter en varias columnas.
Sintaxis:
separar (datos, col, en, sep = ” “, eliminar = VERDADERO, convertir = FALSO)
Parámetro |
Descripción |
datos | Un marco de datos. |
columna | Nombre de la columna o posición. |
dentro |
Nombres de nuevas variables para crear como vector de caracteres. Use NA para omitir la variable en la salida. |
sep | El separador entre las columnas. |
retirar | Si se establece en VERDADERO, eliminará la columna de entrada del marco de datos de salida. |
convertir | Si es VERDADERO, ejecutará type.convert() con as.is = TRUE en las nuevas columnas. |
Ejemplo:
Podemos decir que los conjuntos de datos largos creados usando son apropiados para su uso, pero podemos desglosar aún más la variable de grupo usando .
R
# import tidyr package library(tidyr) long <- tidy_dataframe %>% gather(Group, Frequency, Group.1:Group.3) # use separate() function to make data wider separate_data <- long %>% separate(Group, c("Allotment", "Number")) # print the wider format separate_data
Producción:
S.No Allotment Number Frequency 1 1 Group 1 23 2 2 Group 1 345 3 3 Group 1 76 4 4 Group 1 212 5 5 Group 1 88 6 6 Group 1 199 7 7 Group 1 72 8 8 Group 1 35 9 9 Group 1 90 10 10 Group 1 265 11 1 Group 2 117 12 2 Group 2 89 13 3 Group 2 66 14 4 Group 2 334 15 5 Group 2 90 16 6 Group 2 101 17 7 Group 2 178 18 8 Group 2 233 19 9 Group 2 45 20 10 Group 2 200 21 1 Group 3 29 22 2 Group 3 101 23 3 Group 3 239 24 4 Group 3 289 25 5 Group 3 176 26 6 Group 3 320 27 7 Group 3 89 28 8 Group 3 109 29 9 Group 3 199 30 10 Group 3 56
- Función: fusiona dos columnas en una columna. La función es una función de conveniencia para unir múltiples valores de variables en uno. En esencia, combina dos variables de una sola observación en una sola variable.
Sintaxis:
unir (datos, columna, …, sep = “_”, eliminar = VERDADERO)
Parámetro |
Descripción |
datos | Un marco de datos. |
columna | El nombre de la nueva columna. |
…. | Una selección de las columnas deseadas. Si está vacío, se seleccionan todas las variables. |
sep | Un separador para usar entre valores. |
retirar | Si es VERDADERO, elimine las columnas de entrada del marco de datos de salida. |
Ejemplo:
Unir es el complemento de separar. Para deshacer , podemos usar , que fusiona dos variables en una. Aquí fusionaremos dos columnas Grupo y Número con un separador “.” .
R
# import tidyr package library(tidyr) long <- tidy_dataframe %>% gather(Group, Frequency, Group.1:Group.3) # use separate() function to make data wider separate_data <- long %>% separate(Group, c("Allotment", "Number")) # use unite() function to glue # Allotment and Number columns unite_data <- separate_data %>% unite(Group, Allotment, Number, sep = ".") # print the new data frame unite_data
Producción:
S.No Group Frequency 1 1 Group.1 23 2 2 Group.1 345 3 3 Group.1 76 4 4 Group.1 212 5 5 Group.1 88 6 6 Group.1 199 7 7 Group.1 72 8 8 Group.1 35 9 9 Group.1 90 10 10 Group.1 265 11 1 Group.2 117 12 2 Group.2 89 13 3 Group.2 66 14 4 Group.2 334 15 5 Group.2 90 16 6 Group.2 101 17 7 Group.2 178 18 8 Group.2 233 19 9 Group.2 45 20 10 Group.2 200 21 1 Group.3 29 22 2 Group.3 101 23 3 Group.3 239 24 4 Group.3 289 25 5 Group.3 176 26 6 Group.3 320 27 7 Group.3 89 28 8 Group.3 109 29 9 Group.3 199 30 10 Group.3 56
- función: ayuda a remodelar un formato más largo a un formato más amplio. La función distribuye un par clave-valor en varias columnas.
Sintaxis:
spread(datos, clave, valor, relleno = NA, convertir = FALSO)
Parámetro |
Descripción |
datos | Un marco de datos. |
llave | Nombres de columna o posiciones. |
valor | Nombres de columna o posiciones. |
llenar | Si se establece, los valores faltantes se reemplazarán con este valor. |
convertir | Si es VERDADERO, type.convert() con asis = VERDADERO se ejecutará en cada una de las nuevas columnas. |
Ejemplo:
Podemos transformar los datos de largo a ancho con la función.
R
# import tidyr package library(tidyr) long <- tidy_dataframe %>% gather(Group, Frequency, Group.1:Group.3) # use separate() function to make data wider separate_data <- long %>% separate(Group, c("Allotment", "Number")) # use unite() function to glue # Allotment and Number columns unite_data <- separate_data %>% unite(Group, Allotment, Number, sep = ".") # use unite() function to make data wider back_to_wide <- unite_data %>% spread(Group, Frequency) # print the new data frame back_to_wide
Producción:
S.No Group.1 Group.2 Group.3 1 1 23 117 29 2 2 345 89 101 3 3 76 66 239 4 4 212 334 289 5 5 88 90 176 6 6 199 101 320 7 7 72 178 89 8 8 35 233 109 9 9 90 45 199 10 10 265 200 56
- función: Crea una lista de marcos de datos que contienen todas las variables anidadas. El anidamiento es implícitamente una operación de resumen. Esto es útil junto con otros resúmenes que funcionan con conjuntos de datos completos, sobre todo modelos.
Sintaxis: nest(datos, …, .key = “datos”)
Parámetro |
Descripción |
datos | Un marco de datos. |
…. | Una selección de columnas. Si está vacío, se seleccionan todas las variables. |
.llave | El nombre de la nueva columna, como una string o símbolo. |
Ejemplo: intentemos anidar la columna Group.2 del tidy_dataframe que creamos en el conjunto de datos.
R
# import tidyr package library(tidyr) df <- tidy_dataframe # nest column Group.1 in # tidy_dataframe using nest() df %>% nest(data = c(Group.1))
Producción:
# A tibble: 10 x 4 S.No Group.1 Group.3 data <int> <dbl> <dbl> <list> 1 1 23 29 <tibble [1 x 1]> 2 2 345 101 <tibble [1 x 1]> 3 3 76 239 <tibble [1 x 1]> 4 4 212 289 <tibble [1 x 1]> 5 5 88 176 <tibble [1 x 1]> 6 6 199 320 <tibble [1 x 1]> 7 7 72 89 <tibble [1 x 1]> 8 8 35 109 <tibble [1 x 1]> 9 9 90 199 <tibble [1 x 1]> 10 10 265 56 <tibble [1 x 1]>
- función: Básicamente invierte la operación de nido. Hace que cada elemento de la lista sea su propia fila. Puede manejar columnas de lista que contienen vectores atómicos, listas o marcos de datos (pero no una mezcla de los diferentes tipos).
Sintaxis:
unnest(datos, …, .drop = NA, .id = NULL, .sep = NULL, .preserve = NULL)
Parámetro |
Descripción |
datos | un marco de datos |
…. | Especificación de columnas a desanidar. Si se omite, el valor predeterminado es todas las columnas de lista. |
.soltar |
¿Deberían eliminarse las columnas de lista adicionales? Por defecto, los dejará caer si se desanida las columnas especificadas requieren que las filas se dupliquen. |
.identificación | Identificador de marco de datos. |
.sep |
Si no es NULL, los nombres de las columnas del marco de datos no anidados combinará el nombre de la col lista original con los nombres del marco de datos anidado, separados por .sep. |
.preservar |
Columnas de lista para conservar en la salida. Estos serán duplicado de la misma manera que los vectores atómicos. |
Ejemplo:
Intentaremos anidar y anular la columna Species en el marco de datos de iris en el paquete tidyr.
R
# import the tidyr package library(tidyr) df <- iris names(iris) # nesting the species column in # the df data frame using nest() head(df %>% nest(data = c(Species))) # Output (i) # unnesting the species column # in the df data frame using unnest() head(df %>% unnest(Species,.drop = NA, .preserve = NULL)) # Output (ii)
Salida (yo):
# A tibble: 6 x 5 Sepal.Length Sepal.Width Petal.Length Petal.Width data <dbl> <dbl> <dbl> <dbl> <list> 1 5.1 3.5 1.4 0.2 <tibble [1 x 1]> 2 4.9 3 1.4 0.2 <tibble [1 x 1]> 3 4.7 3.2 1.3 0.2 <tibble [1 x 1]> 4 4.6 3.1 1.5 0.2 <tibble [1 x 1]> 5 5 3.6 1.4 0.2 <tibble [1 x 1]> 6 5.4 3.9 1.7 0.4 <tibble [1 x 1]>
Salida (ii):
# A tibble: 6 x 5 Sepal.Length Sepal.Width Petal.Length Petal.Width Species <dbl> <dbl> <dbl> <dbl> <fct> 1 5.1 3.5 1.4 0.2 setosa 2 4.9 3 1.4 0.2 setosa 3 4.7 3.2 1.3 0.2 setosa 4 4.6 3.1 1.5 0.2 setosa 5 5 3.6 1.4 0.2 setosa 6 5.4 3.9 1.7 0.4 setosa
- función: Se utiliza para completar los valores que faltan en las columnas seleccionadas utilizando la entrada anterior. Esto es útil en el formato de salida común donde los valores no se repiten, se registran cada vez que cambian. Los valores faltantes se reemplazan en vectores atómicos; NULL se reemplaza en la lista.
Sintaxis:
llenar(datos, …, .dirección = c(“abajo”, “arriba”))
Parámetro |
Descripción |
datos | Un marco de datos. |
…. | Una selección de columnas. Si está vacío, no pasa nada. |
dirección | Dirección en la que rellenar los valores que faltan. Actualmente, ya sea «abajo» (el valor predeterminado) o «arriba» |
Ejemplo:
R
# import the tidyr package df <- data.frame(Month = 1:6, Year = c(2000, rep(NA, 5))) # print the df data frame df # Output (i) # use fill() to fill missing values in # Year column in df data frame df %>% fill(Year) # Output (ii)
Salida (yo):
Month Year 1 1 2000 2 2 NA 3 3 NA 4 4 NA 5 5 NA 6 6 NA
Salida (ii):
Month Year 1 1 2000 2 2 2000 3 3 2000 4 4 2000 5 5 2000 6 6 2000
- función: Básicamente llena los valores que faltan en un vector que debería haber sido observado pero no lo fue. El vector debe ser numérico.
Sintaxis: full_seq(x, período, tol = 1e-06)
Parámetro |
Descripción |
X | Un vector numérico. |
período | Brecha entre cada observación. |
tol | Tolerancia numérica para comprobar la periodicidad. |
Ejemplo:
R
# import the tidyr package library(tidyr) # creating a numeric vector num_vec <- c(1, 7, 9, 14, 19, 20) # use full_seq() to fill missing # values in num_vec full_seq(num_vector, 1)
Producción:
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
- función: esta función descarta filas que contienen valores faltantes.
Sintaxis: drop_na(datos, …)
Parámetro |
Descripción |
datos | Un marco de datos. |
…. | Una selección de columnas. Si está vacío, se seleccionan todas las variables. |
Ejemplo:
R
# import tidyr package library(tidyr) # create a tibble df with missing values df <- tibble(S.No = c(1:10), Name = c('John', 'Smith', 'Peter', 'Luke', 'King', rep(NA, 5))) # print df tibble df # Output (i) # use drop_na() to drop columns # in df with missing values df %>% drop_na(Name) # Output (ii)
Salida (yo):
# A tibble: 10 x 2 S.No Name <int> <chr> 1 1 John 2 2 Smith 3 3 Peter 4 4 Luke 5 5 King 6 6 <NA> 7 7 <NA> 8 8 <NA> 9 9 <NA> 10 10 <NA>
Salida (ii):
# A tibble: 5 x 2 S.No Name <int> <chr> 1 1 John 2 2 Smith 3 3 Peter 4 4 Luke 5 5 King
- función: Reemplaza los valores faltantes.
Sintaxis: replace_na(datos, reemplazar, …)
Parámetro |
Descripción |
datos | Un marco de datos. |
reemplazar |
Si data es un marco de datos, devuelve un marco de datos. Si los datos son un vector, devuelve un vector de clase determinado por la unión de datos y reemplaza. |
Ejemplo:
R
# import tidyr package library(tidyr) df <- data.frame(S.No = c(1:10), Name = c('John', 'Smith', 'Peter', 'Luke', 'King', rep(NA, 5))) df # Output (i) # use replace_na() to replace missing values or na df %>% replace_na(list(Name = 'Henry')) # Output (ii)
Salida (yo):
# A tibble: 10 x 2 S.No Name <int> <chr> 1 1 John 2 2 Smith 3 3 Peter 4 4 Luke 5 5 King 6 6 <NA> 7 7 <NA> 8 8 <NA> 9 9 <NA> 10 10 <NA>
Salida (ii):
S.No Name 1 1 John 2 2 Smith 3 3 Peter 4 4 Luke 5 5 King 6 6 Henry 7 7 Henry 8 8 Henry 9 9 Henry 10 10 Henry
Publicación traducida automáticamente
Artículo escrito por misraaakash1998 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA