如何在列中檢查日期是否彼此不同
uj5u.com熱心網友回復:
有了tidyverse你可以group_by同時id和第二IDid2那會組行一起由一個相差一天分開。然后,連續天數列將包括last日期和日期之間的差異first date(如果不是,則為零first date)。
library(tidyverse)
data %>%
mutate(date = as.Date(date, format = "%m-%d-%Y")) %>%
arrange(id, date) %>%
group_by(id) %>%
group_by(id2 = cumsum(c(T, diff(date) > 1)), .add = T) %>%
mutate(num_con_days = ifelse(date == first(date), last(date) - date 1, 0)) %>%
ungroup %>%
select(-id2)
輸出
day id date num_con_days
<dbl> <dbl> <date> <dbl>
1 1 10 2021-01-01 1
2 3 10 2021-01-03 4
3 4 10 2021-01-04 0
4 5 10 2021-01-05 0
5 6 10 2021-01-06 0
6 1 24 2021-01-01 2
7 2 24 2021-01-02 0
8 4 24 2021-01-04 3
9 5 24 2021-01-05 0
10 6 24 2021-01-06 0
編輯:使用您的另一個示例,使用重命名的列名,您有以下 data.frame:
id day num_consecutive_days
1 1 2021-01-02 1
2 2 2021-01-02 1
3 2 2021-01-05 2
4 2 2021-01-06 0
5 2 2021-01-12 1
6 3 2021-01-01 2
7 3 2021-01-02 0
8 3 2021-01-04 1
9 3 2021-01-11 1
10 4 2021-01-01 1
在這里,您采用的day是年-月-日格式(因此在轉換為日期時,您無需提供單獨的格式)。
此外,您需要確保您的列名匹配并且對于day. 請參閱下面的類似代碼 - 這應該與您想要的輸出相同。
df %>%
mutate(day = as.Date(day)) %>%
arrange(id, day) %>%
group_by(id) %>%
group_by(id2 = cumsum(c(T, diff(day) > 1)), .add = T) %>%
mutate(num_con_days = ifelse(day == first(day), last(day) - day 1, 0)) %>%
ungroup %>%
select(-id2)
輸出
id day num_consecutive_days
1 1 2021-01-02 1
2 2 2021-01-02 1
3 2 2021-01-05 2
4 2 2021-01-06 0
5 2 2021-01-12 1
6 3 2021-01-01 2
7 3 2021-01-02 0
8 3 2021-01-04 1
9 3 2021-01-11 1
10 4 2021-01-01 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/362340.html
