簡體   English   中英

R dplyr 累積差異時間與條件

[英]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

或者有lagdifftime

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM