Я пытаюсь сгруппировать идентификаторы с датой в этом наборе данных, но я хочу суммировать на основе одной из функций вне группы.
library(dplyr)
library(lubridate)
set.seed(100)
df <- data.frame(ids = sample(c('436247', '2465347', '346654645'), 10000, replace=TRUE),
date = sample(seq.Date(ymd('2018-03-01'), ymd('2018-05-01'), by=1), 10000, replace=TRUE))
new_df <- df %>%
group_by(ids, date) %>%
summarise(events = length(ids[date >= date - 30 & date <= date]))
Я пытаюсь взять этот фрейм данных и ответить на вопрос - «для каждого из идентификаторов и каждой даты, сколько других записей в этом идентификаторе находятся в течение последних 30 дней этой даты». К сожалению, когда я group_by
и идентификаторы и дата, это только смотрит в сгруппированную дату. Я создал решение ниже, но не уверен, что есть лучшее решение с dplyr?
groupby_function <- function(df, spec_date){
result <- df %>%
group_by(ids) %>%
summarise(events = length(ids[date >= spec_date - 30 & date <= spec_date])) %>%
mutate(date = spec_date)
return(result)
}
date_vector <- seq.Date(ymd('2018-03-01'), ymd('2018-05-01'), by=1)
list_results <- lapply(date_vector, groupby_function, df=df)
x <- do.call(rbind, list_results)