Оставить соединение в R, когда df1 совпадает несколько раз - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть вопрос, который чем-то похож на этот, но это решение не сработало для меня: Функция MATCH в 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 может сделать это на свой. Было бы хорошо показать «NA» в df1 везде, где нет совпадения, но я получаю «NA», даже когда должно быть совпадение. Я пробовал это, но безрезультатно:

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

1 Ответ

0 голосов
/ 30 апреля 2018

Ну, вот вам необработанный запрос 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 в этом случае.

...