问题描述
我被困在这里,并认为我使这个问题复杂化了...
我试图通过在由“,”分隔的县列表中检测到“数字”来对分类变量“县”进行求和。
有没有办法在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","d,a","a,c,d,b"))
d2
County
1 a,b
2 b,c
3 c
4 d,a
5 a,b
d3 <-
d3
County Total
1 a,b 3000
2 b,c 5000
3 c 3000
4 d,a 5000
5 a,b 10000
解决方法
做任何一个
BaseR
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 10000