根据另一个数据帧中的列值对一个数据帧中的值求和

问题描述 投票:0回答:1

我有两个数据框,如下所示

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

我应该如何进行这个过程?任何帮助将不胜感激!

谢谢!

r dataframe dplyr sum
1个回答
0
投票

首先我们将

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  
© www.soinside.com 2019 - 2024. All rights reserved.