我需要从日期变量“casedates”创建一个新变量“controldates”。这个新变量将由与 casedate 在同一周的同一天,在与 case date 相同的月份和年份内的日期组成。例如,如果我的案例日期是 7 月的第 3 个星期三,我的控制日将是 7 月的第一个星期三、7 月的第二个星期三和 7 月的第 4 个星期三。此外,我想为创建的每组日期创建一个指标变量。我想在 r 中使用 dplyr 来做到这一点。
起始数据:
Casedate
"01-03-2015"
"08-27-2017"
"10-23-2019"
Run Code Online (Sandbox Code Playgroud)
这就是我想要的样子
Casedate Controldate Index
"01-03-2015" "01-03-2015" 1
"01-03-2015" "01-10-2015" 1
"01-03-2015" "01-17-2015" 1
"01-03-2015" "01-24-2015" 1
"01-03-2015" "01-31-2015" 1
"08-12-2017" "08-05-2017" 2
"08-12-2017" "08-12-2017" 2
"08-12-2017" "08-19-2017" 2
"08-12-2017" "08-26-2017" 2
"10-23-2019" "10-02-2019" 3
"10-23-2019" "10-09-2019" 3
"10-23-2019" "10-16-2019" 3
"10-23-2019" "10-23-2019" 3
"10-23-2019" "10-30-2019" 3
Run Code Online (Sandbox Code Playgroud)
这是一个带有 的选项tidyverse
。将 'Casedate' 转换为Date
类lubridate
,然后使用 循环遍历元素,在a列中map
创建seq
日期的影响list
unnest
list
library(dplyr)
library(purrr)
library(lubridate)
df1 %>%
mutate(Index = row_number(),
Casedate = mdy(Casedate),
wd = wday(Casedate, label = TRUE),
Controldate = map2(floor_date(Casedate, 'month'), wd, ~ {
x1 <- seq(.x, length.out = 7, by = '1 day')
seq(x1[wday(x1, label = TRUE) == .y],
ceiling_date(.x, 'month'), by = '7 day')})) %>%
unnest(c(Controldate)) %>%
select(Casedate, Controldate, Index)
Run Code Online (Sandbox Code Playgroud)
-输出
# A tibble: 14 x 3
# Casedate Controldate Index
# <date> <date> <int>
# 1 2015-01-03 2015-01-03 1
# 2 2015-01-03 2015-01-10 1
# 3 2015-01-03 2015-01-17 1
# 4 2015-01-03 2015-01-24 1
# 5 2015-01-03 2015-01-31 1
# 6 2017-08-27 2017-08-06 2
# 7 2017-08-27 2017-08-13 2
# 8 2017-08-27 2017-08-20 2
# 9 2017-08-27 2017-08-27 2
#10 2019-10-23 2019-10-02 3
#11 2019-10-23 2019-10-09 3
#12 2019-10-23 2019-10-16 3
#13 2019-10-23 2019-10-23 3
#14 2019-10-23 2019-10-30 3
Run Code Online (Sandbox Code Playgroud)
df1 <- structure(list(Casedate = c("01-03-2015", "08-27-2017", "10-23-2019"
)), class = "data.frame", row.names = c(NA, -3L))
Run Code Online (Sandbox Code Playgroud)