Я хочу сделать полное соединение с двумя фреймами данных на основе 2 столбцов, где 1 столбец содержит строку, найденную в другом. Ниже приведены два моих фрейма данных:
date<-as.Date(c('2010-11-1','2008-3-25','2007-3-14'))
site<-c("abcejams.com", "reitimes.com", "posehbc")
desc1<-c("alpha", "beta", "gamma"
df1<-data.frame(date, site, desc1)
df1
date site desc1
1 2010-11-01 abcejams.com alpha
2 2008-03-25 reitimes.com beta
3 2007-03-14 posehbc gamma
date2<-as.Date(c('2010-11-1','2008-3-25','2007-3-14', '2018-2-9'))
site2<-c("jams", "time", "pose", "abce")
metric2<-c(1,2,3,4)
metric3<-c(10,20,30,40)
df2<-data.frame(date2, site2, metric2, metric3)
df2
date2 site2 metric2 metric3
1 2010-11-01 jams 1 10
2 2008-03-25 time 2 20
3 2007-03-14 pose 3 30
4 2018-02-09 abce 4 40
Я хочу присоединиться к этому по дате и сайту, основываясь на том, что site2 находится на сайте по дате. Вот как вы обычно делаете это без части grep.
finaldf<-full_join(df1, df2, by = c("date"="date2", "site" = "site2"))
Есть способ сделать это с помощью sqldf, но единственным вариантом является левое соединение, а не полное соединение:
test<-sqldf("df1.*, df2.metric2,
df2.metric3
from df1
left join df2
on
instr(df1.site, df2.site2)
and
df1.date=df2.date2")
Цель состоит в том, чтобы конечный результат выглядел так:
date site desc1 metric2 metric3
1 2010-11-01 abcejams.com alpha 1 10
2 2008-03-25 reitimes.com beta 2 20
3 2007-03-14 posehbc gamma 3 30
4 2018-02-09 abce NA 4 40
У кого-нибудь есть опыт в этом?