Paquete tidyr en Programación R

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")

installing 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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *