我有一个与此类似的问题,但此解决方案对我不起作用: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')
答案 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
。