R:合并多个数据帧,这些数据帧现在是列表的元素

时间:2015-03-27 14:16:03

标签: r

我运行了一个双循环并将一些数据存储到列表中。 具体来说,我存储了大约15列的每个数据帧 60到70行作为列表天气的一个元素。 例如

 > weather[[4]][[5]]
   TimeCEST TemperatureC Dew.PointC Humidity Sea.Level.PressurehPa VisibilityKm
1  12:00 AM           12          8       71                  1013           20
2  12:20 AM           11          7       76                  1013           10
3  12:50 AM           11          7       76                  1013           10
4   1:00 AM           11          8       71                  1013           30 

现在,我希望将所有这些数据帧(大约360)按行合并到一个数据帧中。

我尝试再次运行for循环和rbind,但它给出了:

Error in match.names(clabs, names(xi)) : 
names do not match previous names.

然后我尝试了这个:

Reduce(function(x,y) {
  dd<-merge(x,y,by=0); rownames(dd)<-dd$Row.names; dd[-1]
}, weather)

但它给出了:

 Error in data.frame(list(TimeCET = c(19L, 21L, 23L, 1L, 3L, 5L, 25L, 27L,  : 
    arguments imply differing number of rows: 71, 72, 67, 68 

作为后续跟踪,我尝试用NA替换NUll值,以防出现问题,但它是相同的。

请您解释一下这个问题,并说明解决问题的方法? 提前谢谢

1 个答案:

答案 0 :(得分:0)

看起来weather是一个嵌套的data.frames列表。也许你将这些数据合并为两个步骤,比如这个未经测试的代码

second_lvl <- function(lst) {
    # make one df from weather[[i]][[1]], weather[[i]][[2]], etc.
    do.call(rbind, lst)
}

# this should make res a list of data.frames
res <- lapply(weather, FUN=second_lvl)

# this should combine the data.frames
res <- do.call(rbind, res)