使用 dplyr::lag 计算自第一个事件以来的天数
Using dplyr::lag to calculate days since first event
我正在尝试使用 dplyr::lag 来确定自初始事件以来每个事件已经过去的天数,但我遇到了意外行为。
示例,非常简单的数据:
df <- data.frame(id = c("1", "1", "1", "1", "2", "2"),
date= c("4/1/2020", "4/2/2020", "4/3/2020", "4/4/2020", "4/17/2020", "4/18/2020"))
df$date <- as.Date(df$date, format = "%m/%d/%Y")
id date
1 1 4/1/2020
2 1 4/2/2020
3 1 4/3/2020
4 1 4/4/2020
5 2 4/17/2020
6 2 4/18/2020
我希望做的是创建一个新列 days_since_first_event 来计算初始事件(按 ID)与具有此预期输出的每个后续日期之间的天数
df <- df %>%
group_by(id) %>%
mutate(days_since_first_event = as.numeric(date - lag(date)))
id date days_since_first_event
1 1 4/1/2020 0
2 1 4/2/2020 1
3 1 4/3/2020 2
4 1 4/4/2020 3
5 2 4/17/2020 0
6 2 4/18/2020 1
但是我得到了这个输出
# A tibble: 6 x 3
# Groups: id [2]
id date days_since_first_event
<chr> <date> <dbl>
1 1 2020-04-01 NA
2 1 2020-04-02 1
3 1 2020-04-03 1
4 1 2020-04-04 1
5 2 2020-04-17 NA
6 2 2020-04-18 1
对我做错了什么有什么建议吗?
lag()
的前 n 个值获得默认值,因为您没有 'older' 数据。默认值为 NA
。因此,您的结果中 NA
。
此外,使用滞后只会产生连续事件之间的差异。
我正在尝试使用 dplyr::lag 来确定自初始事件以来每个事件已经过去的天数,但我遇到了意外行为。
示例,非常简单的数据:
df <- data.frame(id = c("1", "1", "1", "1", "2", "2"),
date= c("4/1/2020", "4/2/2020", "4/3/2020", "4/4/2020", "4/17/2020", "4/18/2020"))
df$date <- as.Date(df$date, format = "%m/%d/%Y")
id date
1 1 4/1/2020
2 1 4/2/2020
3 1 4/3/2020
4 1 4/4/2020
5 2 4/17/2020
6 2 4/18/2020
我希望做的是创建一个新列 days_since_first_event 来计算初始事件(按 ID)与具有此预期输出的每个后续日期之间的天数
df <- df %>%
group_by(id) %>%
mutate(days_since_first_event = as.numeric(date - lag(date)))
id date days_since_first_event
1 1 4/1/2020 0
2 1 4/2/2020 1
3 1 4/3/2020 2
4 1 4/4/2020 3
5 2 4/17/2020 0
6 2 4/18/2020 1
但是我得到了这个输出
# A tibble: 6 x 3
# Groups: id [2]
id date days_since_first_event
<chr> <date> <dbl>
1 1 2020-04-01 NA
2 1 2020-04-02 1
3 1 2020-04-03 1
4 1 2020-04-04 1
5 2 2020-04-17 NA
6 2 2020-04-18 1
对我做错了什么有什么建议吗?
lag()
的前 n 个值获得默认值,因为您没有 'older' 数据。默认值为 NA
。因此,您的结果中 NA
。
此外,使用滞后只会产生连续事件之间的差异。