我无法将data.frame中的行堆叠成一行。我的数据看起来像这样:
v1 v2 v3 index
var1 ad b1 1
var2 sa b2 2
var3 4 b3 3
var1 5 b4 1
var2 6 b5 2
var3 2 b6 3
. . . .
. . . .
. . . .
我试图转置数据,因此v1成为我的同名,它们也是堆叠的。我熟悉本机转置命令t()
并将colnames指定为第一行。但是,我不确定如何堆叠行。我确实拆分了每组(三个)转换的行,然后将它们绑定在一个循环中,但它非常慢,因为我的数据集是1gb。
var1 var2 var3
ad sa 4
b1 b2 b3
5 6 2
b4 b5 b6
. . .
. . .
. . .
感谢您的帮助!
答案 0 :(得分:0)
来自recast
的{{1}}函数非常适合这一点。但在使用之前,您需要将reshape2
- 列转换为更好的分组变量:
index
现在您的数据如下所示:
# transform 'index' into a grouping variable
dat$index <- cumsum(c(0, head(dat$index, -1) > tail(dat$index, -1)))
# reshape into the new format
library(reshape2)
recast(dat, variable + index ~ v1, id.var = c('v1','index'))[,3:5]