【问题标题】:I aggregated multiple data frames in a list. Each df in the new list has 2cols:"Group.1" & "x". I want assign each x column the name of its data frame我在一个列表中聚合了多个数据框。新列表中的每个 df 都有 2cols:"Group.1" & "x"。我想为每个 x 列分配其数据框的名称
【发布时间】:2020-08-01 09:37:51
【问题描述】:

按照 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”。

谁能帮忙?

提前致谢,

法比奥

【问题讨论】:

  • 请提供您的数据和所需输出的可重复的小示例

标签: r list variables aggregate rename


【解决方案1】:

如果我们有一个名为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')

【讨论】:

  • 太好了,谢谢!也许您可以建议一些关于 R 中 Map 函数及其 funprog 家族的“傻瓜”阅读?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-28
  • 2021-05-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多