将列表中的列与其他列表绑定

时间:2019-02-26 10:03:00

标签: r list cbind

我有一个列表调用Totalsamples,列表中有9个数据帧,如下所示:

year  total
2015   100
2016   115
2017   150
2018   155

我还有另一个列表调用counts,列表中有9个数据帧,如下所示:

year   A   B   C   Sum    
2015   15  10  5   30          
2016   10  13  12  35                   
2017   5   8   15  28             
2018   9   10  5   24

我想将列表Total上的数据帧中的列Totalsamples添加到列表counts上的数据帧

这样我就可以从列表counts

的每个数据框中获取此信息
year   A   B   C   Sum  Total   
2015   15  10  5   30    100      
2016   10  13  12  35    115                
2017   5   8   15  28    150         
2018   9   10  5   24    155

我尝试过

counts<- lapply(counts, function (x) cbind(x, Total = Totalsamples[[x]][total]))   

但是我想我在列表Totalsamples上的索引错误。 你能告诉我怎么做吗?

谢谢

2 个答案:

答案 0 :(得分:0)

是的,您的索引是错误的。您正尝试使用data.frame为TotalSamples编制索引。

您可以使用其中之一。

counts =  lapply(1:length(counts), function (i) cbind(counts[[i]], Total = Totalsamples[[i]][total])) 

for(i in 1:length(counts)){
  counts[[i]]$Total = Totalsamples[[i]]$total
}

或者您可以:

counts = mapply(function(x, y) cbind(x, y[,-1]), counts, Totalsamples)

答案 1 :(得分:0)

您可以使用mapply()

首先,提供一些示例数据:

Totalsamples <- list(
    data.frame(year = 1990:2000, total = rpois(11, 100)),
    data.frame(year = 1990:2000, total = rpois(11, 100))
  )
counts <-list(
    data.frame(
      year = 1990:2000,
      a = rpois(11, 10),
      b = rpois(11, 20)),
    data.frame(
      year = 1990:2000,
      a = rpois(11, 10),
      b = rpois(11, 20)
    )
  )

counts中的列求和

counts <- lapply(counts, function(x) {
  x$sum <- rowSums(x[c("a", "b")])
  x
})

现在使用mapply()进行绑定。 注意:这要求所有数据框中的行顺序必须相同,并且数据框的顺序必须匹配。也就是说,它将在Totalsamples中将第一个data.frame的第一行与在计数中的第一个data.frame的第一行绑定在一起,依此类推...

mapply(function(x, y) {
  out <- cbind(x, y["total"])
  out
}, counts, Totalsamples, SIMPLIFY = FALSE)