Фильтр data.table по условию для группы - PullRequest
0 голосов
/ 01 ноября 2019

Мне нужно постепенно обновлять базу данных SQL и, следовательно, получить в качестве ввода следующее data.table.

library(data.table)
dt1 <- data.table(Category = letters[1:4]
                  , Max.Date = rep(as.Date("2018-01-01"),4))

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

dt2 <- data.table(Category = letters[1:8]
                  , Max.Date = rep(as.Date("2019-01-01"),8))

Требуемый вывод следует выбирать из dt2, где Max.Date большечем в dt1, поэтому желаемый результат должен быть:

   dt.desired 
   Category   Max.Date
1:        a 2019-01-01
2:        b 2019-01-01
3:        c 2019-01-01
4:        d 2019-01-01

Таким образом, выбирается из dt2, где дата для категории больше, чем в dt1.

1 Ответ

2 голосов
/ 01 ноября 2019

Приведенное ниже неравное объединение должно работать

dt2[ dt1, 
     .( Category, Max.Date = x.Max.Date ), 
     on = .( Category, Max.Date > Max.Date ) ][]

должно работать, в результате:

#    Category   Max.Date
# 1:        a 2019-01-01
# 2:        b 2019-01-01
# 3:        c 2019-01-01
# 4:        d 2019-01-01
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...