r - 如何根据R中的一列列表将一个数据帧中的值加到另一个数据帧中
问题描述
我被困在这里,相信我把这个问题复杂化了......
我试图通过在以“,”分隔的县列表中检测分类变量“县”来对“数字”求和。
有没有办法在 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
解决方案
做这些
碱基
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
推荐阅读
- php - preg_match 在 php 中返回链接的地址源
- javascript - 如何将我的输入字段放在我的滑块 javascript 上方
- visual-studio - 如果可用,将 VersionSuffix 设置为提交 id
- c++ - 如何使用 gcov 生成覆盖信息的 HTML 报告?
- python - 如何在 lambda 函数中将变量从 NoneType 更改为 Float?
- angular - 错误:NullInjectorError:没有 CompilerFactory 的提供者!当我尝试在同一页面中运行 2 个角度元素时
- node.js - 读取 csv 时返回非 utf-8 响应
- amazon-web-services - AWS Elasticsearch vpc 端点和私有 vpc 域
- python - 如何重塑未对齐的数据集并用 numpy 丢弃剩余数据?
- javascript - 正则表达式匹配 Javascript 中的版本号