连接具有不同数量元素的嵌套列表

时间:2011-09-22 16:42:32

标签: r nested-lists

我是R的新手并且有一个我无法解决的连接问题。

我有一个庞大的数据框架:

  

station POSIX date.str forec.time lead.time mean.ens obs

     

6019 2011-08-06 06:00 20110806 00 006 45 67

     

6019 2011-08-06 07:00 20110806 00 007 69 72

     

6031 2011-08-06 12:00 20110806 06 006 87 95

     

6031 2011-08-06 13:00 20110806 06 007 88 97

我使用“ply”分割数据框,如下所示

  

mydata.split <- dlply(mydataframe, .(datestr), dlply, .(forec.time), dlply, .(lead.time), identity, .drop = FALSE)

我使用数据进行一些计算,这需要以这种方式分割数据。我把这个新列表称为mynewlist af计算。我想连接这些数据,但由于列表元素的数量不同,我遇到了问题。

  

> length(mynewlist[[1]][[1]])

     

[1] 34

     

> length(mynewlist[[1]][[2]])

     

[1] 38

我尝试使用do.call( rbind, do.call( rbind, do.call( rbind, mynewlist) ) )将列表连接到数据框中,但我收到以下消息:

In function (..., deparse.level = 1) : number of columns of result is not a multiple of vector length (arg 1)

有没有一种方法可以将嵌套列表与不同数量的元素连接起来?

我渴望得到帮助或指向一个方向。 看待 Sisse

1 个答案:

答案 0 :(得分:1)

只需使用ldply将所有这些列表重新拼接在一起。

使用baseball中的plyr数据,在问题中使用dlply来吐出数据:

library(plyr)
x <- dlply(baseball, .(year), transform, mean_rbi = mean(rbi)) 

现在使用ldply将列表合并到data.frame

y <- ldply(x)

结果:

str(y)
'data.frame':   21699 obs. of  23 variables:
 $ id      : chr  "ansonca01" "forceda01" "mathebo01" "startjo01" ...
 $ year    : int  1871 1871 1871 1871 1871 1871 1871 1872 1872 1872 ...
 $ stint   : int  1 1 1 1 1 1 1 1 1 1 ...
 $ team    : chr  "RC1" "WS3" "FW1" "NY2" ...
 $ lg      : chr  "" "" "" "" ...
 $ g       : int  25 32 19 33 29 29 29 46 37 25 ...
 ...
 $ rbi     : int  16 29 10 34 23 21 23 50 15 16 ...
 ...
 $ gidp    : int  NA NA NA NA NA NA NA NA NA NA ...
 $ mean_rbi: num  22.3 22.3 22.3 22.3 22.3 ...