标题可能有点含糊,让我解释一下我要做什么
这是我的数据框:
Person<-c("Andrew","John","Mike")
Age<-c(25,34,21)
ColA_1<-c(1,5,7)
ColA_2<-c(5,0,9)
ColA_3<-c(4,4,1)
ColB_1<-c(16,55,37)
ColB_2<-c(25,14,39)
ColB_3<-c(43,64,31)
df<-data.frame(Person=Person,Age=Age,
ColA_1=ColA_1,
ColA_2=ColA_2,
ColA_3=ColA_3,
ColB_1=ColB_1,
ColB_2=ColB_2,
ColB_3=ColB_3)
我想实现的是一个长格式的新数据帧,在A列下方有B列(ColB_1,ColB_2,ColB_3),同时复制Person和Age的值。在SPSS中,这相当于VARSTOCASES。输出数据帧将有6列:两列用于“个人”和“年龄”,三列用于折叠的A和B列,一列指示该行是否引用A或B数据。
我已经混入了{reshape2}包中的melt函数,但似乎只能将数据汇总到单个列中,而不是三个列中。我唯一的解决方案是创建两个数据帧,首先使用A列,其次使用B和rbind()在一起。但是,我需要针对非常复杂的数据集实现此目标,并且希望有一个更简单,更优雅的解决方案。
预期结果是:
Person Age Index Col_1 Col_2 Col_3
1 Andrew 25 A 1 5 4
2 John 34 A 5 0 4
3 Mike 21 A 7 9 1
4 Andrew 25 B 16 25 43
5 John 34 B 55 14 64
6 Mike 21 B 37 39 31
reshape
这里的功能很好。
reshape(df, varying=list(c(3,6), c(4,7), c(5,8)),
times=c("A","B"), v.names=paste0("Col_",1:3), direction="long")
数据
df <-
structure(list(Person = structure(1:3, .Label = c("Andrew", "John",
"Mike"), class = "factor"), Age = c(25, 34, 21), ColA_1 = c(1,
5, 7), ColA_2 = c(5, 0, 9), ColA_3 = c(4, 4, 1), ColB_1 = c(16,
55, 37), ColB_2 = c(25, 14, 39), ColB_3 = c(43, 64, 31)), .Names = c("Person",
"Age", "ColA_1", "ColA_2", "ColA_3", "ColB_1", "ColB_2", "ColB_3"
), row.names = c(NA, -3L), class = "data.frame")
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句