Я относительно новичок в R, и у меня есть вопрос относительно того, как выполнять условную агрегацию с использованием data.tables (или других методов), сохраняя при этом доступ к столбцам таблицы по ссылке. Был ответ на аналогичный вопрос here, но он занимает много времени на моих данных и занимает много памяти. Вот некоторые игрушки данные:R data.table условный (мин./Макс.) Агрегация
t <- data.table(User=c(1,1,1,1,1,2,2,2,2,3,3,3,3,3,3),
Obs=c(1,2,3,4,5,1,2,3,4,1,2,3,4,5,6),
Flag=c(0,1,0,1,0,0,1,0,0,1,0,0,0,1,0))
который выглядит следующим образом:
User Obs Flag
1: 1 1 0
2: 1 2 1
3: 1 3 0
4: 1 4 1
5: 1 5 0
6: 2 1 0
7: 2 2 1
8: 2 3 0
9: 2 4 0
10: 3 1 1
11: 3 2 0
12: 3 3 0
13: 3 4 0
14: 3 5 1
15: 3 6 0
То, что я хотел бы сделать с этим, чтобы получить максимальное наблюдение меньше текущего наблюдения, где флаг 1, от пользователя. Результат должен выглядеть так:
User Obs Flag min.max
1: 1 1 0 NA
2: 1 2 1 2
3: 1 3 0 2
4: 1 4 1 4
5: 1 5 0 4
6: 2 1 0 NA
7: 2 2 1 2
8: 2 3 0 2
9: 2 4 0 2
10: 3 1 1 1
11: 3 2 0 1
12: 3 3 0 1
13: 3 4 0 1
14: 3 5 1 5
15: 3 6 0 5
Любая помощь была бы принята с благодарностью!
Он работает, спасибо! – giraffe
Я подозреваю, что что-то с 'rleid' также будет работать, но не может проверить ... возможно' t [, m: = Obs [Flag == 1] [rleid (cumsum (Flag))], by = User] ' – Frank
@Frank close - он работает, если вы просто замените 'cumsum (diff (...' с 'rleid (cumsum (...' in 'by') – eddi