首页 > 解决方案 > 我在一个列表中聚合了多个数据框。新列表中的每个 df 都有 2cols:"Group.1" & "x"。我想为每个 x 列分配其数据框的名称

问题描述

我聚合了输入列表中的多个数据帧,正如 Andrew Gustar 在lapply aggregate columns in multiple dataframes R 中所建议的那样(按天意) 。

这是从上述页面复制的代码。

创建数据框:

df1 <- data.frame(Count = c(1,2,3), ID = c("A","A","C"))
df2 <- data.frame(Count = c(1,1,2), ID = c("C","B","C"))
dfList <- list(df1,df2)

> head(dfList)
[[1]]
  Count ID
1     1  A
2     2  A
3     3  C

[[2]]
  Count ID
1     1  C
2     1  B
3     2  C

按“ID”列聚合(由 Andrew Gustar 建议)

dfList_agg<-lapply(dfList, function(i) {
  aggregate(i[,1], by=list(i[,2]), FUN=sum)
})

dflist_agg

[[1]]
  Group.1 x
1       A 3
2       C 3

[[2]]
  Group.1 x
1       B 1
2       C 3

如上所示,输出列表中的每个数据框都有一个名为“Group.1”的列(包含 BY 列),另一个名为“x”(包含汇总数据)。

相反,我需要为每个“x”列分配其相应数据框的名称。参考该示例,我希望名为“x”的两个列在输出列表中都获得不同的名称“df1”和“df2”。

任何人都可以帮忙吗?

提前致谢,

法比奥

标签: rlistvariablesaggregaterename

解决方案


如果我们有一个 named list,那么用Map它来做分配

dfList_agg <- Map(function(dat, y) {
        names(dat)[names(dat)=='x'] <- y
        dat},
            dfList_agg, names(dfList_agg))
dfList_agg
#$df1
#  Group.1 df1
#1       A   3
#2       C   3

#$df2
#  Group.1 df2
#1       B   1
#2       C   3

数据

dfList_agg <- list(structure(list(Group.1 = structure(1:2, .Label = c("A", 
"C"), class = "factor"), x = c(3, 3)), row.names = c(NA, -2L), class = "data.frame"), 
    structure(list(Group.1 = structure(1:2, .Label = c("B", "C"
    ), class = "factor"), x = c(1, 3)), row.names = c(NA, -2L
    ), class = "data.frame"))
names(dfList_agg) <- c('df1', 'df2')

推荐阅读