這讓我很頭疼,想知道我是否能得到一些建議。
我有 2 個資料框
df1 = data.frame("ID" = c("a", "b", "a", "c", "a", "b"),
"date" = as.Date(c("2020-1-1", "2020-1-2", "2020-1-5","2020-1-10", "2020-1-10", "2020-1-15"))
df2 = data.frame("ID" = c("a", "b", "a", "c"),
"start" = as.Date(c("2019-12-30", "2020-1-1", "2020-1-5","2020-1-10")),
"end" = as.Date(c("2020-1-3", "2020-1-2", "2020-1-12","2020-1-14")))
對于 df2 中的每一行,我想計算在規定的開始/結束日期內發生的 df1 中的觀察次數。
結果應如下所示:
df3 = data.frame("ID" = c("a", "b", "a", "c"),
"start" = as.Date(c("2019-12-30", "2020-1-1", "2020-1-5","2020-1-10")),
"end" = as.Date(c("2020-1-3", "2020-1-2", "2020-1-12","2020-1-14")),
"count" = c("1", "1", "2", "1"))
我見過的大多數解決方案都涉及一些 group_by 或 merge 函式,當我想要保留的 df2 中多次出現相同的 ID 時,這些函式會變得混亂。
有什么建議么?謝謝!
uj5u.com熱心網友回復:
我們可以這樣做:首先按 ID 加入(使用inner_join
),然后在 ifelse 陳述句中檢查日期是否在開始和結束之間。下一個分組是獲得 OP 所需輸出的必要條件,最后總結一下:
library(dplyr)
inner_join(df1, df2, by = "ID") %>%
rowwise() %>%
mutate(match = ifelse(between(date, start, end), 1, 0)) %>%
group_by(ID, start, end) %>%
summarise(n = sum(match))
ID start end n
<chr> <date> <date> <dbl>
1 a 2019-12-30 2020-01-03 1
2 a 2020-01-05 2020-01-12 2
3 b 2020-01-01 2020-01-02 1
4 c 2020-01-10 2020-01-14 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/535401.html
標籤:r
上一篇:是否有R庫或方法來繪制sigmoid函式并從原始資料中獲取方程
下一篇:根據R中匹配列的長度重復串列