我是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
答案 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 ...