Cómo usar Pivot_longer para cambiar la forma de datos de tipo ancho a datos de tipo largo con múltiples variables

Resuelto Shunsuke NISHIOKA asked hace 54 años • 1 respuestas

Me gustaría preguntar cómo remodelar el siguiente marco de datos de tipo ancho a tipo largo. Los datos de tipo ancho son los siguientes.

Datos de tipo ancho antes de remodelar:

ingrese la descripción de la imagen aquí

Los datos de tipo largo, es decir, el marco de datos que me gustaría obtener, son los siguientes.

Datos de tipo largo después de remodelar:

Datos de tipo largo después de remodelar

Agradecería enormemente si pudiera darme consejos para hacer esto usando pivot-longer. Podría remodelar los datos por separado mediante BLS y ELS escribiendo:

df_long_BLS <- df %>%
pivot_longer(
cols = starts_with("BLS_tchrG"),
names_to = "grade",
names_prefix = "BLS_tchrG",
values_to = "BLS_tchrG"
)
df_long_ELS <- df %>%
pivot_longer(
cols = starts_with("ELS_tchrG"),
names_to = "grade",
names_prefix = "ELS_tchrG",
values_to = "ELS_tchrG"
)

Pero de esta manera necesito fusionar los 2 archivos separados. Me gustaría saber cómo remodelar estos datos sin crear 2 archivos separados.

Shunsuke NISHIOKA avatar Jan 01 '70 08:01 Shunsuke NISHIOKA
Aceptado

Puedes probar :

tidyr::pivot_longer(df, cols = -ID_IE, 
                    names_to = c('.value', 'grade'), 
                    names_pattern = '(.*)(\\d+)')

# A tibble: 8 x 4
#  ID_IE grade BLS_tchrG ELS_tchrG
#  <dbl> <chr>     <dbl>     <dbl>
#1  2135 2             1         1
#2  2135 7             1         1
#3  2101 2             0         0
#4  2101 7             2         0
#5  2103 2             0         0
#6  2103 7             3         0
#7  2111 2             1         1
#8  2111 7             4         1

datos

Probado con estos datos:

df <- data.frame(ID_IE = c(2135, 2101, 2103, 2111), BLS_tchrG2 = c(1, 0, 0, 1), 
                 BLS_tchrG7 = 1:4,
                 ELS_tchrG2 = c(1, 0, 0, 1), ELS_tchrG7 = c(1, 0, 0, 1))
Ronak Shah avatar May 03 '2020 07:05 Ronak Shah