我有一个列表调用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
上的索引错误。
你能告诉我怎么做吗?
谢谢
答案 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)