我如何根据某些条件计算日期?
How could I count dates based on some condition?
我有两个日期变量,一个是问题开放日期,另一个是问题回答日期,如下所示:
q_open q_answer
2020-09-01 2020-09-02
2020-09-01 2020-09-09
2020-09-05 NA
2020-09-10 2020-09-17
我需要找出一周内未回答问题的次数。一周从 min(q_open) 开始。所以第一周从 2020-09-01 开始,到 2020-09-07 结束。
所以期望的输出是:
Week count_answered
1 2 # considering NA also
2 1
提前致谢。
我们可以从最小值中减去 q_open
值来计算周数,得到答案日期和 q_open
日期之间的周差,保留大于 1 周的行和 count
他们。
library(dplyr)
df %>%
mutate(week_num = as.integer(ceiling(pmax(q_open - min(q_open), 1)/7))) %>%
filter(difftime(q_answer, q_open,units = "weeks") >= 1 | is.na(q_answer)) %>%
count(week_num)
# week_num n
#1 1 2
#2 2 1
数据
假设列的日期为 class。如果他们不是运行df[] <- lapply(df, as.Date)
第一。
df <- structure(list(q_open = structure(c(18506, 18506, 18510, 18515
), class = "Date"), q_answer = structure(c(18507, 18514, NA,
18522), class = "Date")), row.names = c(NA, -4L), class = "data.frame")
这个怎么样:
library(dplyr)
library(lubridate)
library(tibble)
data <- tibble(
q_open = as.Date(c("2020-09-01", "2020-09-01", "2020-09-05", "2020-09-10")),
q_answer = as.Date(c("2020-09-02", "2020-09-09", NA, "2020-09-17"))
)
out <- data %>%
mutate(wk_open = week(q_open),
wk_answer = week(q_answer)) %>%
mutate(on_time = ifelse(wk_answer >= wk_open + 1, TRUE, FALSE )) %>%
group_by(wk_open) %>%
summarise(count_answered = sum(on_time, na.rm = TRUE))
与:
> out
# A tibble: 3 x 2
wk_open count_answered
<dbl> <int>
1 35 2
2 36 0
3 37 1
我有两个日期变量,一个是问题开放日期,另一个是问题回答日期,如下所示:
q_open q_answer
2020-09-01 2020-09-02
2020-09-01 2020-09-09
2020-09-05 NA
2020-09-10 2020-09-17
我需要找出一周内未回答问题的次数。一周从 min(q_open) 开始。所以第一周从 2020-09-01 开始,到 2020-09-07 结束。 所以期望的输出是:
Week count_answered
1 2 # considering NA also
2 1
提前致谢。
我们可以从最小值中减去 q_open
值来计算周数,得到答案日期和 q_open
日期之间的周差,保留大于 1 周的行和 count
他们。
library(dplyr)
df %>%
mutate(week_num = as.integer(ceiling(pmax(q_open - min(q_open), 1)/7))) %>%
filter(difftime(q_answer, q_open,units = "weeks") >= 1 | is.na(q_answer)) %>%
count(week_num)
# week_num n
#1 1 2
#2 2 1
数据
假设列的日期为 class。如果他们不是运行df[] <- lapply(df, as.Date)
第一。
df <- structure(list(q_open = structure(c(18506, 18506, 18510, 18515
), class = "Date"), q_answer = structure(c(18507, 18514, NA,
18522), class = "Date")), row.names = c(NA, -4L), class = "data.frame")
这个怎么样:
library(dplyr)
library(lubridate)
library(tibble)
data <- tibble(
q_open = as.Date(c("2020-09-01", "2020-09-01", "2020-09-05", "2020-09-10")),
q_answer = as.Date(c("2020-09-02", "2020-09-09", NA, "2020-09-17"))
)
out <- data %>%
mutate(wk_open = week(q_open),
wk_answer = week(q_answer)) %>%
mutate(on_time = ifelse(wk_answer >= wk_open + 1, TRUE, FALSE )) %>%
group_by(wk_open) %>%
summarise(count_answered = sum(on_time, na.rm = TRUE))
与:
> out
# A tibble: 3 x 2
wk_open count_answered
<dbl> <int>
1 35 2
2 36 0
3 37 1