как установить подкадр данных двумя условиями в другом кадре данных - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть два кадра данных.

ID            Date
 1      1999-01-01
 1      2000-01-01
 1      2001-01-01
 2      1999-01-01
 2      2000-01-01
 3      1998-01-01
 3      1999-01-01
 4      2000-01-01

и

ID            Date
 1      1999-03-01
 2      2000-01-01
 3      1998-01-01

Моя цель состоит в том, чтобы подставить первый кадр данных по идентификатору во второй кадр данных.Затем в каждой подгруппе идентификатора я выбираю только дату, которая не ранее даты во втором фрейме данных.Например, я выбираю только вторую и третью строки идентификатора 1, потому что их даты не ранее 1999-03-01 во втором фрейме данных.Мой желаемый результат -

ID            Date
 1      2000-01-01
 1      2001-01-01
 2      2000-01-01
 3      1998-01-01
 3      1999-01-01

Ответы [ 2 ]

3 голосов
/ 10 апреля 2019

Это можно сделать с помощью пакета dplyr, соединив второй фрейм данных с первым и используя фильтр.Если столбцы имеют одинаковые имена, dplyr добавит .x и .y к именам столбцов, поэтому ваш код будет выглядеть примерно так:

 df1 %>% inner_join(df2, by = 'ID') %>% filter(Date.x >= Date.y)
2 голосов
/ 10 апреля 2019

Если ваши фреймы данных являются таблицами данных, вы можете использовать приведенный ниже код для объединения двух таблиц при совпадении ID s и Date из df1> = Date из df2, что вернет результат непосредственно, без необходимости дополнительного шага фильтра.

library(data.table)

df1[df2, on = .(ID, Date >= Date), .(ID, Date = x.Date)]

#    ID       Date
# 1:  1 2000-01-01
# 2:  1 2001-01-01
# 3:  2 2000-01-01
# 4:  3 1998-01-01
# 5:  3 1999-01-01

Используемые данные

df1 <- fread('
ID            Date
 1      1999-01-01
 1      2000-01-01
 1      2001-01-01
 2      1999-01-01
 2      2000-01-01
 3      1998-01-01
 3      1999-01-01
 4      2000-01-01
')
df1[, Date := as.Date(Date)]

df2 <- fread('
ID            Date
 1      1999-03-01
 2      2000-01-01
 3      1998-01-01
')
df2[, Date := as.Date(Date)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...