R 将数据集从宽更改为长,同时保留组id,并收集列
我真的很感激你能帮我把这些杂乱无章的新调查数据整理成一个有用的表格。它是以一种奇怪的方式收集的,现在我有奇怪的数据要处理。我已经浏览了tidyr并使用了这些方法。我怀疑我的问题是,我对这个数据集的想法完全错了,我对一些真正的答案视而不见。但是考虑到我需要对这个df做的所有事情,我不知道从哪里开始,也不知道从哪里开始谷歌搜索 我需要的是: 让每个人都成为自己的一行 每个人都保留其GroupID和治疗价值 用于将当前附加到每个人的变量单独变为列(年龄、体重、身高) 假的(小得多):R 将数据集从宽更改为长,同时保留组id,并收集列,r,R,我真的很感激你能帮我把这些杂乱无章的新调查数据整理成一个有用的表格。它是以一种奇怪的方式收集的,现在我有奇怪的数据要处理。我已经浏览了tidyr并使用了这些方法。我怀疑我的问题是,我对这个数据集的想法完全错了,我对一些真正的答案视而不见。但是考虑到我需要对这个df做的所有事情,我不知道从哪里开始,也不知道从哪里开始谷歌搜索 我需要的是: 让每个人都成为自己的一行 每个人都保留其GroupID和治疗价值 用于将当前附加到每个人的变量单独变为列(年龄、体重、身高) 假的(小得多): 如果您能为我提供
如果您能为我提供任何帮助或进一步的阅读资料,我将不胜感激。
重塑
可以做到这一点,并提供适当的参数:
> reshape(x, direction="long", varying=names(x)[3:11], timevar='person', v.names=c('height', 'age', 'weight'), sep='_')
GroupID Treated person height age weight id
1.1 1 Y 1 187 45 69 1
2.1 2 Y 1 145 33 64 2
3.1 3 N 1 136 71 51 3
4.1 4 Y 1 201 19 70 4
5.1 5 N 1 168 52 66 5
1.2 1 Y 2 140 54 62 1
2.2 2 Y 2 122 20 70 2
3.2 3 N 2 186 48 65 3
4.2 4 Y 2 160 63 72 4
5.2 5 N 2 232 26 74 5
1.3 1 Y 3 112 21 61 1
2.3 2 Y 3 143 56 69 2
3.3 3 N 3 187 40 73 3
4.3 4 Y 3 194 59 63 4
5.3 5 N 3 159 67 72 5
这取决于原始数据中列的顺序,因为variable
参数在原始数据中的顺序是递增的
如果情况并非如此,请手动指定变化
。下面是上面使用的内容:
> names(x)[3:11]
[1] "person1_age" "person1_weight" "person1_height" "person2_age" "person2_weight" "person2_height"
[7] "person3_age" "person3_weight" "person3_height"
我们还可以使用
melt
fromdata.table
,它可以在measure
参数中获取多个模式
library(data.table)
melt(setDT(x), measure = patterns("age$", "weight$", "height$"),
variable.name = "person", value.name = c("age", "weight", "height"))
# GroupID Treated person age weight height
# 1: 1 Y 1 45 187 69
# 2: 2 Y 1 33 145 64
# 3: 3 N 1 71 136 51
# 4: 4 Y 1 19 201 70
# 5: 5 N 1 52 168 66
# 6: 1 Y 2 54 140 62
# 7: 2 Y 2 20 122 70
# 8: 3 N 2 48 186 65
# 9: 4 Y 2 63 160 72
#10: 5 N 2 26 232 74
#11: 1 Y 3 21 112 61
#12: 2 Y 3 56 143 69
#13: 3 N 3 40 187 73
#14: 4 Y 3 59 194 63
#15: 5 N 3 67 159 72
library(data.table)
melt(setDT(x), measure = patterns("age$", "weight$", "height$"),
variable.name = "person", value.name = c("age", "weight", "height"))
# GroupID Treated person age weight height
# 1: 1 Y 1 45 187 69
# 2: 2 Y 1 33 145 64
# 3: 3 N 1 71 136 51
# 4: 4 Y 1 19 201 70
# 5: 5 N 1 52 168 66
# 6: 1 Y 2 54 140 62
# 7: 2 Y 2 20 122 70
# 8: 3 N 2 48 186 65
# 9: 4 Y 2 63 160 72
#10: 5 N 2 26 232 74
#11: 1 Y 3 21 112 61
#12: 2 Y 3 56 143 69
#13: 3 N 3 40 187 73
#14: 4 Y 3 59 194 63
#15: 5 N 3 67 159 72