当df1匹配多次时左连接到R.

时间:2018-04-30 16:02:13

标签: r left-join

我有一个与此类似的问题,但此解决方案对我不起作用:MATCH function in r

我有两个看起来像这样的数据框:

df1

 query         page
 apple         site.com
 apple         site.com/apples
 banana        site.com/bananas
 bad apples    site.com/apples'

DF2

page                sessions
site.com             20
site.com/apples      30
site.com/bananas     50'

我需要在df1中显示会话的新列。当我按照上面的讨论尝试使用match()时,整个列返回为“NA”。这是我的代码:

df1$sessions <- df2$sessions[match(df1$page, df2$page)]

我也试过合并:

df_merged = merge(df1, df2, by="page", all.x = TRUE)

似乎左连接在这里有意义,可能使用sqldf + function(),但我似乎无法正确地表达这一点,我不完全确定是否需要函数或者如果sqldf可以执行此操作它自己的。如果没有匹配的话,在df1中显示“NA”会很好,但即使应该有匹配,我也会得到“NA”。我试过这个,但无济于事:

df_merged <- left_join(df1, df2 by='page')

1 个答案:

答案 0 :(得分:0)

你想要的原始SQL查询是这样的:

SELECT df1.query, df1.page, df2.sessions
FROM df1
LEFT JOIN df2
    ON df1.page = df2.page

我们可以使用sqldf包轻松地运行此查询:

library(sqldf)
sql <- "SELECT df1.query, df1.page, df2.session FROM df1 LEFT JOIN df2 ON df1.page = df2.page"
result <- sqldf(sql)

我不知道对于那些不匹配的session行,您将在df1列下获得什么值。在这种情况下,我希望NA