【问题标题】:How to sum values from one data frame into another based on a column of lists in R如何根据R中的一列列表将一个数据帧中的值加到另一个数据帧中
【发布时间】:2020-09-13 15:42:08
【问题描述】:

我被困在这里,相信我把这个问题复杂化了......

我试图通过在以“,”分隔的县列表中检测分类变量“县”来对“数字”求和。

有没有办法在 base 和/或 dplyr 中做到这一点?我尝试了一些 str_detect 和 filter 的变体,但似乎无法弄清楚。

在数据帧 d1-d3 处查看以下代码:

  • d1 显示与每个“县”关联的“数字”
  • d2 显示要汇总的每个“县”列表
  • d3 应该显示列出的每个“县”的总和
d1 <- data.frame(County =  c("a", "b", "c", "d") ,
                Number = c(1000, 2000, 3000, 4000))
d1

  County Number
1      a   1000
2      b   2000
3      c   3000
4      d   4000

d2 <- data.frame(County =  c("a, b", "b, c", "c", "d, a", "a, c, d, b"))

d2

 County
1   a, b
2   b, c
3      c
4   d, a
5   a, c, d, b


d3 <- 

d3 

County           Total 
1   a, b         3000
2   b, c         5000
3      c         3000
4   d, a         5000
5   a, c, d, b   10000

【问题讨论】:

  • 您的问题没有解决吗?您尚未评论/接受

标签: r dataframe sum across


【解决方案1】:

做这些

基础R

d2$Total <- Map(f= function(x) sum(d1$Number[match(x, d1$County)]), strsplit(d2$County, ", "))

> d2
      County Total
1       a, b  3000
2       b, c  5000
3          c  3000
4       d, a  5000
5 a, c, d, b 10000

tidyverse

library(tidyverse)
d2 %>% mutate(Total = map(str_split(County, ", "), ~ sum(d1$Number[match(.x, d1$County)])))

      County Total
1       a, b  3000
2       b, c  5000
3          c  3000
4       d, a  5000
5 a, c, d, b 10000

【讨论】:

    猜你喜欢
    • 2021-10-22
    • 2023-03-15
    • 1970-01-01
    • 2020-03-13
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 2022-10-25
    • 2022-01-20
    相关资源
    最近更新 更多