[英]Conditional sum / sumifs in R
我想根據日期將表 B 中的度量計數保留到表 A 上。
前任。 表A:
成員 | A.DateBeg | A.DateEnd |
---|---|---|
001 | 202001 | 202012 |
001 | 202101 | 202112 |
003 | 202001 | 202012 |
003 | 202101 | 202112 |
表B:
B.會員 | B.日期 | B.計數 |
---|---|---|
001 | 202011 | 5 |
001 | 202102 | 7 |
001 | 202103 | 3 |
003 | 202007 | 4 |
003 | 202011 | 2 |
003 | 202012 | 3 |
我想要做的基本上是一個 left_join 和 sum 或 summarise ,其中 by 是一個條件語句。
類似於: Sum(B.Count) Where B.Date >= A.DateBeg AND B.Date < A.DateEnd
我在想類似的事情:
TableC <- left_join(TableA, TableB, by = c("A.Member" = "B.Member", "B.Date" >= "A.DateBeg" & "B.Date < "A.DateEnd"), sum(B.Count))
結果 TableC 應如下所示:
成員 | A.DateBeg | A.DateEnd | Sum(B.Count) |
---|---|---|---|
001 | 202001 | 202012 | 12 |
001 | 202101 | 202112 | 3 |
003 | 202001 | 202012 | 9 |
003 | 202101 | 202112 | 0 |
真的卡在這個了。
這可以。 用fuzzyjoin
完成
library(fuzzyjoin)
library(dplyr)
fuzzy_left_join(TableA, TableB,
by = c("A.Member" = "B.Member", "A.DateBeg" = "B.Date",
"A.DateEnd" = "B.Date"),
match_fun = list(`==`, `<=`, `>`)) %>%
group_by(A.Member, A.DateBeg, A.DateEnd) %>%
summarise(Sum = sum(B.Count, na.rm = TRUE), .groups = 'drop')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.