时间变长

时间:2016-06-10 21:12:44

标签: r reshape

我想将data.frame从long移动到wide。每当我有一个重复的id时,我想将我在特定var中的结果复制到一个新的col。最后我希望id成为一个唯一的id。我已经看过使用重塑功能 - 但似乎无法处理没有" timevar" - 在我的特定情况下,我没有一个我想重塑的分组变量。堆栈溢出有很多重塑数据,但我似乎无法找到这个问题。

我有:

a<- 
    data.frame( 
        id = c( 11,12,13,14,15,15,16,17,17,18,19,10) ,
        pi = c( 21:32 )
)

我想要

b<- 
    data.frame( 
        id = c( 11,12,13,14,15,16,17,18,19,10) ,
        pi = c( 21:25,27:28,30:32 ),
        pi2 = c( NA,NA,NA,NA,26,NA,29,NA,NA,NA)     
)

1 个答案:

答案 0 :(得分:0)

您可以通过以下几个步骤完成此操作:

bb <- aggregate(pi~id, data=a, FUN=c)
cols <- max(sapply(bb$pi, length))
b <- cbind(bb$id, sapply(seq(cols), function(i) sapply(bb$pi, '[', i)))
b
##    [,1] [,2] [,3]
## 1    10   32   NA
## 2    11   21   NA
## 3    12   22   NA
## 4    13   23   NA
## 5    14   24   NA
## 6    15   25   26
## 8    16   27   NA
## 9    17   28   29
## 11   18   30   NA
## 12   19   31   NA