我有两个数据框,如下所示
library(dplyr)
State = c('AK','AL','AR','AZ')
Perc = c(0.0023, 0.0034, 0.0043, 0.065)
df1 <- data.frame(State, Perc)
ID = c('A','B','C','D','E')
States = c('AK','AK; AL', 'AK; AL; AR; AZ', 'AR; AZ', 'AL')
df2 <- data.frame(ID, States)
我想在 df2 中创建一个新列,用于查找 df1 中特定状态的 Perc 值,并对每个 ID 的值求和。理想情况下,我想要一个新的 df2,如下所示:
ID States SumPerc
A AK 0.0023
B AK; AL 0.0057
C AK; AL; AR; AZ 0.0750
D AR; AZ 0.0693
E AL 0.0034
我应该如何进行这个过程?任何帮助将不胜感激!
谢谢!
首先我们将
df2
分成每个状态的一行,然后加入 Perc
数据。然后我们只需要根据ID
组进行聚合备份,然后重新连接States
并求和Perc
library(tidyverse)
df2 %>% separate_rows(States, sep = "; ") %>%
left_join(., df1, by = c("States" = "State")) %>%
group_by(ID) %>%
summarize(
Perc = sum(as.numeric(Perc), na.rm = TRUE),
States=paste(States, collapse= "; ")
)
ID Perc States
<chr> <dbl> <chr>
1 A 0.0023 AK
2 B 0.0057 AK; AL
3 C 0.075 AK; AL; AR; AZ
4 D 0.0693 AR; AZ
5 E 0.0034 AL