У меня есть 2 кадра данных
df1 имеет 700 000 точек данных
- ID1: категориальная переменная имеет более 400 категорий
- Дата1: данные за 1 год
- MST1: 2 уровня переменной 1/2
- Номер подтверждения: уникальный идентификатор
пример данных:
ID1 ExtractDate1 MktSeg1 ConfirmationNo
145 3/7/2017 2 29083253
145 3/7/2017 1 29085100
145 3/7/2017 1 29085102
145 3/7/2017 1 29085106
145 3/7/2017 1 29084895
145 3/7/2017 1 29084953
df2 имеет 100 000 точек данных
- ID2: категориальная переменная имеет более 400 категорий
- Дата2: данные за 1 год
- MST2: 2 уровня переменной 1/2
- Conf No: уникальный идентификатор
Я хочу создать новую переменную, пометить df1, которая помечается как 1, когда номер подтверждения присутствует в df1 и df2, иначе 0
Я добился этого с помощью следующего:
combi1 <- sqldf("SELECT Distinct ID1,
ExtractDate1,
MktSeg1,
ConfirmationNo,
CASE
WHEN confno IS NOT NULL
THEN 1
ELSE 0
END AS 'Flag'
FROM df1
LEFT JOIN df2 ON ID1 = ID2
AND ExtractDate2 >= ExtractDate1
AND ConfirmationNo = confno", drv = "SQLite")
На получение результатов уходит более 20-30 минут, есть ли лучший способ сделать это?
Я пробовал это
combi3 <- left_join(tbl_df(df1),tbl_df(df2),
by = c("ID1" = "ID2" , "ExtractDate1" <= "ExtractDate2", "ConfirmationNo" = "ConfNo")) %>%
select(distinct(ID1, ExtractDate1, MktSeg1, ConfirmationNo))
выдает следующую ошибку:
`by` can't contain join column `TRUE` which is missing from LHS