我想从列表中收集的现有数据框创建新的聚合数据框。理想情况下,它们将显示为由前缀指示的自己的数据帧。这就是我所拥有的:
dfList <- list(A = data.frame(y = sample(1:100), x = c("grp1","grp2")),
B = data.frame(y = sample(1:100), x = c("grp1","grp2")))
agrFun <- function(df){
prefix <- deparse(substitute(df))
assign(paste0(prefix,"_AGR"),
aggregate(y ~ x, data = df, sum))
}
lapply(seq_along(dfList), function(x) agrFun(dfList[[x]]))
聚合按预期发生但我不知道为了创建数据帧A_AGR和B_AGR我还需要做什么。
编辑: 一点澄清。我希望聚合的数据框出现在环境中。
所以不是这个
LS() [1]“agrFun”“dfList”
我的目标是
LS() [1]“A_AGR”“B_AGR”“agrFun”“dfList”
EDIT2:
或者更理想的是让dfList包含数据帧A,A_AGR,B和B_AGR。
EDIT3:
我还想保留数据帧的名称。
答案 0 :(得分:3)
你的方式似乎非常复杂。您可以使用以下内容在data.frames
中创建名为list
的通缉名称:
setNames(lapply(dfList, function(u) aggregate(y~x, u, sum)), paste0(names(dfList),"_AGR"))
#$A_AGR
# x y
#1 grp1 2340
#2 grp2 2710
#$B_AGR
# x y
#1 grp1 2573
#2 grp2 2477
使用您的函数agrFun
:
lst = setNames(lapply(dfList, function(x) agrFun(x)), paste0(names(dfList),"_AGR"))
如果要附加两个列表:
dfList = append(lst, dfList)