Для каждой группы (индивидуальный_идентификатор), для каждого недельного_идентификатора я хочу рассчитать количество появлений, которые индивид сделал за предыдущие X недель в каждом городе.
Я экспериментировал с dplyr безрезультатно.Я пробовал цикл, но он всегда использует набор данных, который я использую (около 250 000 наблюдений> 1000 человек в 20 городах. Тем более, что я хочу посмотреть количество появлений за предыдущие два года (т.е. X = 104недели).
theDates = as.Date(c('07/05/2017','07/05/2017', '07/05/2017', '14/05/2017', '14/05/2017',
'21/05/2017','21/05/2017','21/05/2017', '28/05/2017', '04/06/2017', '04/06/2017', '04/06/2017', '11/06/2017',
'18/06/2017', '18/06/2017'), format='%d/%m/%Y')
someData = data.frame(individual_id = c(1,2,3,2,3,1,2,3,3,1,2,3,3,2,3), week_end_date=theDates,
city=c('Chicago','Chicago','Chicago','Washington', 'Washington', 'Chicago','Chicago', 'Chicago','Washington',
'Washington', 'Washington','Washington','Chicago','Washington', 'Washington'))
someData$nChicagoAppearancesInLastXweeks = NA
someData$nWashingtonAppearancesInLastXweeks = NA
X = 4 # this is the number of weeks for the window length
someData$start_of_period_date = someData$week_end_date - 7*X # this is the start of the range of dates to count appearances over
for (i in 1:dim(someData)[1]) {
WEEK_IDS = seq(someData$start_of_period_date[i], someData$week_end_date[i]-1, by='days')
INDIVIDUAL_ID = someData$individual_id[i]
someData$nChicagoAppearancesInLastXweeks[i] = sum(ifelse(someData$city=='Chicago' & someData$individual_id == INDIVIDUAL_ID & someData$week_end_date %in% WEEK_IDS,1,0))
someData$nWashingtonAppearancesInLastXweeks[i] = with(someData, sum(ifelse(city=='Washington' & individual_id == INDIVIDUAL_ID & week_end_date %in% c(WEEK_IDS),1,0)))
}
Ожидаемый результат будет в двух новых столбцах, в которых будет указано, сколько раз каждый индивидуальный_идентификатор появлялся в каждом городе в предыдущие X недель. Код цикла делает это, но, очевидно, это не лучший способ.сделать это.