[英]R dplyr cumulative difftime with condition
假設我有這樣的數據框:
dt <-
data.frame(
date = as.Date(
c("2022-01-01", "2022-01-03", "2022-01-05", "2022-01-06", "2022-01-07", "2022-02-01", "2022-02-01"))
)
我想計算日期序列,其中第一個和最后一個之間的 difftime 小於或等於 2 天。 一旦序列到達最后可能的一天,我想從所有即將到來的序列中創建序列。
換句話說:數據集甚至序列以 2022-01-01 開始,因此它將被標記為 0 - 2022-01-03 將被標記為 1,因為它是從 2022-01-01 開始的序列的一部分。
2022-01-05 不能用 0 標記,因為 2022-01-01 和 2022-01-05 之間的 difftime 大於 2 天,這個日期是新序列的開始,所有即將到來的日期 difftime 低於或等於2 天(2022-01-06 和 2022-01-07)將以 0 標記。
與 2022-02-01 類似(請注意,數據集中可能有相同的日期)。
我更喜歡 dplyr 解決方案,但如果您可以創建另一個解決方案,請幫助我非常感謝您的幫助。
result <-
data.frame(
date = as.Date(
c("2022-01-01", "2022-01-03", "2022-01-05", "2022-01-06", "2022-01-07", "2022-02-01", "2022-02-01")),
flag = c(0, 1, 1, 0, 0, 1, 0)
)
我們可以使用diff
來獲取相鄰“日期”之間的差異並將其轉換為邏輯向量 ( >
) 並使用+
或as.integer
將邏輯強制轉換為二進制
library(dplyr)
dt <- dt %>%
mutate(flag = +(c(0, diff(date) > 1)))
-輸出
dt
date flag
1 2022-01-01 0
2 2022-01-03 1
3 2022-01-05 1
4 2022-01-06 0
5 2022-01-07 0
6 2022-02-01 1
7 2022-02-01 0
或者有lag
和difftime
dt %>%
mutate(flag = +(difftime(date, lag(date, default = first(date)),
units = "day") > 1))
date flag
1 2022-01-01 0
2 2022-01-03 1
3 2022-01-05 1
4 2022-01-06 0
5 2022-01-07 0
6 2022-02-01 1
7 2022-02-01 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.