根据另一个表中的值计算一个表中的总和

时间:2019-06-17 20:44:22

标签: r dataframe join

我有一个表,它在一个周期的几天中具有不同的%值:

1    5%    
2   10%    
3   30%    
4   10%    
5   15%    
6   15%  
7   15%

我还有另一个表,该表具有不同的特定日期和相应的日期:

6/17/19       1    
6/23/19       7    
6/27/19       4    
7/01/19       7

对于第二个表中的每一对(即[1,7]和[4,7] ),我希望从第一天到第七天以及第四天到第七天的百分比总和,分别在第一个表中。

我考虑了加入表格,但这对基于另一列的条件求和一列的问题没有帮助。哪些功能可能对此有用?

1 个答案:

答案 0 :(得分:2)

df1 <- read.table(text="Day Value
1    5%    
2   10%    
3   30%    
4   10%    
5   15%    
6   15%  
7   15%", header=T)

df2 <- read.table(text = "Date StartEnd
6/17/19       1    
6/23/19       7    
6/27/19       3    
7/01/19       7", header=T)


library(tidyverse)

df2 %>% 
 mutate(id = rep(1:(n()/2), each=2)) %>% 
  group_by(id) %>% 
  expand(SE=min(StartEnd):max(StartEnd)) %>% 
  left_join(df1, by=c("SE"="Day")) %>% 
  mutate(Value = as.numeric(sub("%", "", Value))) %>%
  summarise(Value = sum(Value)) %>% 
  ungroup() %>% 
  left_join({df2 %>% mutate(id = rep(1:(n()/2), each=2))},., by='id') %>% 
  select(-id)

#>      Date StartEnd Value
#> 1 6/17/19        1   100
#> 2 6/23/19        7   100
#> 3 6/27/19        3    85
#> 4 7/01/19        7    85

reprex package(v0.3.0)于2019-06-17创建