首页 > 解决方案 > 使用 reshape package-part 2 重塑数据库

问题描述

继上一篇文章Reshaping database using reshape package中的交互之后,我创建了这个来询问其他问题。简要地说:我有一个数据库,它包含一些为 Id 列复制的行,我想转置它。下面的例子展示了我的数据库的一个小例子。

test<-data.frame(Id=c(1,1,2,3),    
                 St=c(20,80,80,20),
                 gap=seq(0.02,0.08,by=0.02),
                 gip=c(0.23,0.60,0.86,2.09),
                 gat=c(0.0107,0.989,0.337,0.663))

我想要一个像我附上的这个图的最终数据库:

在此处输入图像描述

每个 Id 值都有一行,并附加了不同的列。

你能给我一些建议吗?

标签: rdataframereshapetranspose

解决方案


您可以使用dcast来自data.table. 此功能允许传播多个值变量。

library(data.table)
setDT(test) # convert test to a data.table
test1 <- dcast(test, Id ~ rowid(Id),
               value.var = c('St', 'gap', 'gip', 'gat'), fill = 0)
test1
#   Id St_1 St_2 gap_1 gap_2 gip_1 gip_2  gat_1 gat_2
#1:  1   20   80  0.02  0.04  0.23   0.6 0.0107 0.989
#2:  2   80    0  0.06  0.00  0.86   0.0 0.3370 0.000
#3:  3   20    0  0.08  0.00  2.09   0.0 0.6630 0.000

如果您想在最后继续data.frame通话setDF(test1)


推荐阅读