Подставьте фрейм данных для даты и сохраните все более поздние даты в data.table - PullRequest
1 голос
/ 05 августа 2020

У меня есть следующие data.table

DT <- data.table(id=c(1,1,1,2,2,2,2),
                 date1=c("2013-11-22","2013-11-22","2013-11-22","2015-12-22","2015-12-22","2010-12-22","2010-12-22"),
                 variable=c(20.5,22.1,21.9,30.3,30.5,28.7,27.9))

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

id      date1 variable
1:  1 2013-11-22     20.5
2:  1 2013-11-22     22.1
3:  1 2013-11-22     21.9
4:  2 2015-12-22     30.3
5:  2 2015-12-22     30.5

Я использую данные. table и попробовал что-то вроде этого

setDT(DT)[,.SD[which.max(date1)],by='id']

Но он дает мне результат только для одной строки на id. Я хочу сохранить строки со всеми более поздними датами.

Ответы [ 2 ]

1 голос
/ 05 августа 2020

Вы можете сделать:

DT[, .SD[date1 == max(date1)], by = 'id']

Вывод:

   id      date1 variable
1:  1 2013-11-22     20.5
2:  1 2013-11-22     22.1
3:  1 2013-11-22     21.9
4:  2 2015-12-22     30.3
5:  2 2015-12-22     30.5
1 голос
/ 05 августа 2020

Мы можем использовать .I

DT[DT[, .I[date1 == max(date1)], id]$V1]
#  id      date1 variable
#1:  1 2013-11-22     20.5
#2:  1 2013-11-22     22.1
#3:  1 2013-11-22     21.9
#4:  2 2015-12-22     30.3
#5:  2 2015-12-22     30.5
...