【问题标题】:How to add two elements in a single list in R如何在R中的单个列表中添加两个元素
【发布时间】:2019-11-21 06:35:49
【问题描述】:

我有一个由 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,])

但我不知道如何在一个列表中合并不同的元素。有人可以告诉我如何执行相同的操作。

【问题讨论】:

  • 你知道bng1bng2 将成为mylist 中的第一个和第三个元素吗?它没有名字。
  • 是的,我知道这些名字。当我从 excel 文件中读取数据时,我已经用相应的 excel 工作表名称命名了元素,这些名称是城市名称。

标签: r list


【解决方案1】:

如果您的列表被命名,您可以这样做

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]])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多