r - 我在一个列表中聚合了多个数据框。新列表中的每个 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”。
任何人都可以帮忙吗?
提前致谢,
法比奥
解决方案
如果我们有一个 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')
推荐阅读
- orientdb - OrientDB 3 sql脚本错误
- xamarin.forms - xamarin ios:下一个在 IOS 的签名和分发过程中呈灰色显示
- r - 基于计数的过滤因子变量
- c# - 记录登录日期/时间
- docker - Gitlab CI Runner:致命:找不到命令 sh
- html - Move the line down
- puppeteer - Puppeteer can't catch failing request & errors
- kubernetes - kubectl x509: certificate signed by unknown authority
- c# - 如何在 ASP.NET Core 2 MVC 中使用依赖注入设置单元可测试模型验证?
- javascript - 如何将边距值存储在变量中?