使用lapply函数创建新的聚合R数据帧

时间:2015-05-20 08:11:35

标签: r dataframe

我想从列表中收集的现有数据框创建新的聚合数据框。理想情况下,它们将显示为由前缀指示的自己的数据帧。这就是我所拥有的:

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:

我还想保留数据帧的名称。

1 个答案:

答案 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)