首页 > 解决方案 > 复杂的数据重组——从宽到长(多列)

问题描述

我想进行上述重组,但我正在努力使用gather(),因为有多个列要制作......有人知道这样做的方法吗?

在此处输入图像描述

标签: rreshapereshape2melt

解决方案


这应该可行,尽管可能不是最优雅的:

library(reshape2)
library(tidyr)
library(dplyr)

示例数据(基于屏幕截图):

df <- tibble(id = c(1,2,3), 
         mathT1 = c(10, 9, 7),
         mathT2 = c(11, 6, 8),
         write1 = c(2, 3, 1),
         write2 = c(3, 5, 1),
         ses = c(3, 4, 5))

使用包 reshape2、dplyr 和 tidyr 的代码:

df <- df %>%
  rename(math_1 = mathT1, math_2 = mathT2, 
         write_1 = write1, write_2 = write2, ses_1 = ses) %>%
  mutate(ses_2 = ses_1) %>%
  melt(id.vars = "id", variable.name = "var", value.name = "value") %>%
  separate(var, c("var", "time"), "_", extra = "merge") %>%
  spread(var, value)

推荐阅读