【发布时间】:2017-08-04 18:57:41
【问题描述】:
我有一个包含 9 个数据帧的列表,每个数据帧大约有 100 行和 5-6 列。
我想基于所有数据帧中另一个 col 中指定的组来聚合 col 中的值,并将所有结果存储在单独的数据帧中。为了阐明,考虑一个列表
[[1]]
Date Group Age
Nov A 13
Nov A 14
Nov B 9
Nov D 10
[[2]]
Date Group Age
Dec C 11
Dec C 12
Dec E 10
我的代码如下
for (i in 1:length(list)){
x<-aggregate(list[[i]]$Age~list[[i]]$Group, list[[i]], sum)
x<-rbind(x)
}
但最后,x 仅包含数据帧 2 的聚合结果(因为 i =2)而不是数据帧 1 的聚合结果,尽管我正在尝试绑定结果。
非常感谢任何帮助。
【问题讨论】:
-
当您重复循环时,您将覆盖
x。您应该将中间结果 (x) 保存在一个空列表中,然后在循环外部执行new_list[[i]] <- x进行初始化,然后再合并。或者你可以像x <- aggregate...; z <- rbind(z, x)一样在循环中增加你的结果(z也应该在循环之外初始化为一个空的data.frame) -
它可以在没有
for循环的情况下完成。使用lapply聚合您的列表,然后调用rbind他们:类似于:do.call(rbind,lapply(list,function(x)aggregate(x$Age~x$Group,x, sum)))