这可能有一个简单的答案,但是经过几个小时的搜索后,我仍然找不到。基本上,我需要将一个宽格式数据集转换为长格式数据集,但是包含多个变量。我的数据集结构如下:
df1 <- data.frame(id = c(1,2,3),
sex = c("M","F","M"),
day0s = c(21,25,15),
day1s = c(20,30,18),
day2s = c(18,18,17),
day0t = c(2,5,7),
day1t = c(3,6,5),
day2t = c(3,8,7))
df1
id sex day0s day1s day2s day0t day1t day2t
1 M 21 20 18 2 3 3
2 F 25 30 18 5 6 8
3 M 15 18 17 7 5 7
基本上,有三个科目进行了数学考试(s)和历史考试(t),每天进行3天。我尝试使用tidyr中的gather函数将其转换为长格式,但我不知道如何将mt和ht变量分配到同一天。我还编写了一个新变量day,只包括day0 = 0,day1 = 1和day2 = 2。
dfl <- df1 %>%
gather(day, value, - c(id,sex))
dfl
id sex variable value day
1 M day0s 21 0
1 M day1s 20 1
1 M day2s 18 2
1 M day0t 2 0
1 M day1t 3 1
1 M day2t 3 2
2 F day0s 25 0
2 F day1s 30 1
2 F day2s 18 2
2 F day0t 5 0
2 F day1t 6 1
2 F day2t 8 2
3 M day0s 15 0
3 M day1s 18 1
3 M day2s 17 2
3 M day0t 7 0
3 M day1t 5 1
3 M day2t 7 1
最理想的情况是最终它应该看起来像这样。
id sex day s t
1 M 0 21 2
1 M 1 20 3
1 M 2 18 3
2 F 0 25 5
2 F 1 30 6
2 F 2 18 8
3 M 0 15 7
3 M 1 18 5
3 M 2 17 7
您有关于如何实现这一目标的任何建议吗?
s
和t
的列day
,不是mt
和ht
。 - Rui Barradas