r - 如何使用Pivot_longer将宽类型数据 reshape 为具有多个变量的长类型数据

标签 r tidyverse tidyr reshape2

我想问如何将以下数据框从宽类型 reshape 为长类型。 宽类型数据如下。

整形前的宽类型数据:

enter image description here

长型数据,即我想要获取的数据帧,如下。

整形后的Long类型数据:

Long-type data after reshaping

如果您能给我一些使用pivot-longer 来完成此操作的提示,我将非常感激。我可以通过 BLS 和 ELS 分别 reshape 数据,方法如下:

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 个单独的文件的情况下进行数据 reshape 。

最佳答案

你可以尝试:

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

数据

尝试过此数据:

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

关于r - 如何使用Pivot_longer将宽类型数据 reshape 为具有多个变量的长类型数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61570710/

相关文章:

r - 连续分类数据序列

r - 使用 R 和 tidyverse 将 tidy 表转换为深度嵌套列表

r - dplyr数据透视表

r - 在R中仅删除数据帧中的相邻重复项

r - updateSelectInput 不更新 selectInput 的 input$id 值

替换文本文件中的第 n 行

r - 使用 Dplyr::Bind_Rows 和 Purrr 在数据框列表中选择性地绑定(bind)不同的数据框

r - 使 rbind 循环更快

r - 使用 summarise_all [R] 在 dplyr 组内执行 t 检验

r - 将单个唯一变量合并到其他相同的行中