问题描述
你能帮我解决这个问题吗:
我有一个数据框 (df1
),其中包含网站 CMS 中发布的所有文章的索引。有一列用于当前 URL
和一列原始 URL,以防它们在发布后发生更改(列名称 Origin
):
网址 | 起源 | 文章ID | 作者 | 类别 | 成本 |
---|---|---|---|---|---|
https://example.com/article1 | https://example.com/article | 001 | 作者姓名 | 政治 | 120 美元 |
https://example.com/article2 | https://example.com/article2 | 002 | 作者姓名 | 金融 | 68 美元 |
接下来,我有一个巨大的数据框 (df2
),其中包含一段时间内的网络分析导出。它有一个日期,只有 1 列用于显示 URL 和浏览量。
网页浏览日期 | 网址 | 浏览量 |
---|---|---|
2019-01-01 | https://example.com/article | 224544 |
2019-01-01 | https://example.com/article1 | 656565 |
我如何使用第一个数据帧加入这个但匹配 URL
= URL
或 Origin
= URL
所以最终的结果是这样的:
网页浏览日期 | 浏览量 | 文章ID | 作者 | 类别 |
---|---|---|---|---|
2019-01-01 | 881109 | 001 | 作者姓名 | 政治 |
即 881109
是将与同一文章相关的 224544
和 656565
相加的结果
我想我正在寻找的是 sql 语法的等价物,例如:
LEFT JOIN ...`enter code here`
ON URL = URL
OR Origin = URL```
解决方法
您可以获得长格式的数据帧 1 (lineNumber:columnNumber
),这样 df1
和 Origin
都在同一列中,然后与第二个数据帧 (URL
}).
df2
数据
library(dplyr)
library(tidyr)
df1 %>%
pivot_longer(cols = c(URL,Origin),values_to = 'URL') %>%
inner_join(df2,by = 'URL') %>%
select(-name)
# ArticleID Author Category name URL PageviewDate Pageviews
# <int> <chr> <chr> <chr> <chr> <chr> <int>
#1 1 AuthorName Politics URL https://example.com/article1 2019-01-01 656565
#2 1 AuthorName Politics Origin https://example.com/article 2019-01-01 224544