У меня есть два кадра данных разной длины. Оба фрейма данных содержат даты. Я хотел бы присоединиться к ближайшему столбцу даты, не переходя. Например, если «2019-01-05» является датой, а два варианта - «2019-01-06» и «2019-01-02», он объединяется с «2019-01-02». Я попытался использовать roll "inf" из пакета data.table, но не получил желаемого результата. Вот 2 фрейма данных игрушек, к которым я хочу присоединиться по дате.
Я также хотел бы сгруппировать объединение по столбцу тикера. В Tidyverse код будет похож на:
df1 %>% group_by(ticker) %>% inner_join(df2, by = "Date") #but choose the closest date without going over.
df1 = data.frame(ticker = c("AAPL", "AAPL", "MSFT", "MSFT"), date = c("2019-01-06", "2019-02-06", "2019-01-06", "2019-05-02"))
df2 = data.frame(ticker = c("AAPL", "AAPL", "AAPL", "MSFT", "MSFT", "MSFT"), date = c("2019-01-03", "2019-01-07" , "2019-02-06", "2019-01-05", "2019-01-07", "2019-05-02"), randomVar = rnorm(6))
print(df1)
ticker date
1 AAPL 2019-01-06
2 AAPL 2019-02-06
3 MSFT 2019-01-06
4 MSFT 2019-05-02
print(df2)
ticker date randomVar
1 AAPL 2019-01-03 -0.5321493
2 AAPL 2019-01-07 -0.7909461
3 AAPL 2019-02-06 0.2121993
4 MSFT 2019-01-05 1.2336315
5 MSFT 2019-01-07 -0.2729354
6 MSFT 2019-05-02 -0.5349596
Я хотел бы создать df3, который является объединением между df1 и df2. Столбец ключа даты должен быть только столбцом даты df1.
В этом случае наш новый df3 должен выглядеть точно так же.
print(df3)
ticker date randomVar
1 AAPL 2019-01-06 -0.5321493
2 AAPL 2019-02-06 0.2121993
3 MSFT 2019-01-06 1.2336315
4 MSFT 2019-05-02 -0.5349596