R 如何堆叠数据帧的行
我无法将data.frame中的行堆叠为一行。我的数据如下所示:R 如何堆叠数据帧的行,r,R,我无法将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
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
. . . .
. . . .
. . . .
var1 var2 var3
1 ad sa 4
2 5 6 2
3 b1 b2 b3
4 b4 b5 b6
我正在尝试转换数据,使v1成为我的colname,并且它们也被堆叠起来。我熟悉本机转置命令t()
,并将colnames指定为第一行。但是,我不确定如何堆叠这些行。我确实将转置的每组行(三行)分解,然后将它们绑定到一个循环中,但速度非常慢,因为我的数据集是1gb
var1 var2 var3
ad sa 4
b1 b2 b3
5 6 2
b4 b5 b6
. . .
. . .
. . .
谢谢你的帮助 来自
restrape2
的recast
功能非常适合于此。但在使用之前,您需要将索引
-列转换为更好的分组变量:
# 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]
restrape2
中的recast
函数非常适合于此。但在使用之前,您需要将索引
-列转换为更好的分组变量:
# 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]
您应该能够使用
tidyr::spread
或reformae2::dcast
(搜索类似于“从长到宽的数据”),但您可能需要首先创建一个id
列来标识哪些行放在一起。如果您的行按您想要的方式排序,那么它可能简单到0:(nrow(your_data)-1)%/%3
。您应该能够使用tidyr::spread
或restrape2::dcast
(搜索类似“从长到宽的数据”),但是,您可能需要首先创建一个id
列来标识哪些行放在一起。如果您的行按您想要的方式排序,那么它可能简单到0:(nrow(your_data)-1)%/%3
。谢谢!我想错了,但重铸后我仍然可以排序,结果会一模一样。谢谢!我想错了,但重铸后我仍然可以排序,结果会完全一样。