r - 如何在R中的单个列表中添加两个元素
问题描述
我有一个由 22 个数据框组成的列表,每个数据框都是 excel 文件中的一张表。每个 DF 都包含我使用 read_excel 函数加载到 R 中的特定城市财务详细信息。有几个城市有两个分支机构,因此我需要合并这两个城市。如何在 R 中执行此操作。
可重现的脚本:
> bng1 <- data.frame(parameters = c('cost','emp_count','revenue'), values = c(125,50,200))
> chn <- data.frame(parameters = c('cost','emp_count','revenue'), values = c(100,45,180))
> bng2 <- data.frame(parameters = c('cost','emp_count','revenue'), values = c(25,10,100))
>
> mylist <- list(bng1,chn,bng2) #I got my list by creating a function using lapply and read_excel to read data into R
> mylist
[[1]]
parameters values
1 cost 125
2 emp_count 50
3 revenue 200
[[2]]
parameters values
1 cost 100
2 emp_count 45
3 revenue 180
[[3]]
parameters values
1 cost 25
2 emp_count 10
3 revenue 100
我需要结合 bng1 和 bng2 的详细信息,然后我将得到一个由两个 DF 组成的列表:chn 和 bng1 or(2)。
预期输出:
mylist
[[1]]
parameters values
1 cost 150
2 emp_count 60
3 revenue 300
[[2]]
parameters values
1 cost 100
2 emp_count 45
3 revenue 180
我使用 lapply 来添加或减去列表中每个元素的特定行/列等
lapply(list, function(x) x[a,] +/- x[b,])
但我不知道如何在一个列表中合并不同的元素。有人可以让我知道如何执行相同的操作。
解决方案
如果您的列表已命名,您可以执行
names(mylist) <- c("bng1","chn","bng2")
list(aggregate(values~parameters, do.call(rbind, mylist[c("bng1", "bng2")]),
sum), mylist[["chn"]])
#[[1]]
# parameters values
#1 cost 150
#2 emp_count 60
#3 revenue 300
#[[2]]
# parameters values
#1 cost 100
#2 emp_count 45
#3 revenue 180
或按位置
list(aggregate(values~parameters, do.call(rbind, mylist[c(1, 3)]),
sum), mylist[[2]])
并类似地使用dplyr
library(dplyr)
list(bind_rows(mylist[c(1, 3)]) %>%
group_by(parameters) %>%
summarise(values = sum(values)), mylist[[2]])
推荐阅读
- python - 如何在 Python 中打印此输出 [自上而下(偶数)] [自下而上(奇数)]
- php - 下载 php 文件而不是使用 nginx 和 docker 执行
- bootstrap-4 - 如果我们已经有用于创建响应式网站的引导类,为什么还要使用媒体查询
- python - 系列和数据框之间的区别
- c - 声明未定义的行为
- ios - InstantiateViewController(identifier:creator:)' 仅适用于 iOS 13.0 或更高版本
- c++ - Qt - 为什么我在 qml 资源中添加 10Mb 文件后 Visual Studio 2019 无法再编译我的项目?
- bash - 允许自动完成 Ansible playbook 中的标签
- wordpress - 如何从 foreach 循环中删除重复的结果
- javascript - 如何将 react-chartjs-2 与 chartjs-plugin-datasource 集成以在 s3 url 处使用数据源