Как использовать Pivot_longer для преобразования из данных широкого типа в данные длинного типа с несколькими переменными - PullRequest
0 голосов
/ 03 мая 2020

Я хотел бы спросить, как изменить следующий фрейм данных с широкого типа на длинный тип.

Данные широкого типа выглядят следующим образом. Данные широкого типа перед изменением формы Данные длинного типа, то есть тот кадр данных, который я хотел бы получить, выглядят следующим образом. Данные длинного типа после изменения формы Огромное спасибо, если вы могли бы дать мне советы, как сделать это с помощью pivot-long.

Я мог бы изменить данные отдельно по BLS и ELS, написав:

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

Но таким образом мне нужно объединить 2 отдельных файла. Я хотел бы знать, как выполнить преобразование этих данных без создания двух отдельных файлов.

Заранее большое спасибо,

1 Ответ

0 голосов
/ 03 мая 2020

Вы можете попробовать:

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

data

Пробовали по этим данным:

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