我有6个月间隔的数据(ID、6个月开始日期、结局值),但对于某些ID,有半年的结局缺失。
id = c("aa", "aa", "ab", "ab", "ab")
date = as.Date(c("2021-07-01", "2022-07-01", "2021-07-01", "2022-01-01", "2022-07-01"))
col3 = c(1,2,1,2,1)
df <- data.frame(id, date, col3)
对于日期为每月的类似数据集,我使用complete(date = seq.Date(start date, end date, by = "month")
来填充缺失的月份,并在第3列的outcome字段中添加0。
我可以执行以下操作并将数据扩展为monthly,然后创建一个新的6个月的start date列,按它和ID分组,并对col3求和。
df_complete <- df %>% group_by(id) %>%
complete(date = seq.Date(as.Date(min(date)), as.Date(max(date) %m+% months(5)), by="month")) %>%
mutate (col3 = replace_na(col3, 0))
df_complete_6mth <- df_complete %>% mutate(
halfyear = ifelse(as.integer(format(date, '%m')) <= 6,
paste0(format(date, '%Y'), '-01-01'),
paste0(format(date, '%Y'), '-07-01'))) %>%
group_by(id, halfyear) %>%
summarise(col3_halfyear = sum(col3))
但是,是否有一个解决方案,其中“by =”参数指定6个月?
df_complete <- df %>% group_by(id) %>%
complete(date = seq.Date(as.Date(min(date)), as.Date(max(date) %m+% months(5)), by="months(6)")) %>%
mutate (col3 = replace_na(col3, 0))
但没有成功。
2条答案
按热度按时间lmyy7pcs1#
在
seq.Date
的帮助中:by可以通过多种方式指定。
一个数字,以天为单位。
类difftime的对象
一个字符串,包含“日”、“周”、“月”、“季度”或“年”之一。它可以选择在前面加一个(正或负)整数和一个空格,或在后面加“s”。
所以我希望你想:
irlmq6kh2#
你能这样做吗?你按月份做一个日期序列,然后在第一个之后每隔六个取一个。
由reprex package(v2.0.1)于2023年2月8日创建