Вот ответ. Но предполагается, что есть непрерывная последовательность дат в каждом

аюсь сгруппировать идентификаторы с датой в этом наборе данных, но я хочу суммировать на основе одной из функций за пределами группы.

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)

Ответы на вопрос(4)

Ваш ответ на вопрос