匹配特定列和合并[不同长度DF]

时间:2018-04-19 16:04:11

标签: r dplyr data.table

我是R的新手,还在学习。

我有两个data.framesdfdf1

page <- c("ABC", "DDD", "DSD")
freq <- c(1,33,555)
df <- data.frame(page, freq)

df1 <- data.frame(page = c("ABC", "DDD", "DSD", "SDSD", "vEf", "DDD"),
 URL = c("fakeurl1", "fakeurl2", "fakeurl3", "fakeurl4", "fakeurl5", "fakeurl6")) 

我想将网址与df合并,只显示出现的第一个网址,因为您可以看到df1有多个相同page的条目。

如果有人可以为此basedplyrdata.table解决方案,我感激不尽。

1 个答案:

答案 0 :(得分:2)

这适合我。

R base解决方案

pagenondupe <- df1[!duplicated(df1$page, fromLast = F), ]
dfx <- merge(df, pagenondupe[,c("page", "URL")], by = "page", all.x = TRUE)

我从df1开始接受第一次非欺骗。如果您有日期,可以按日期订购,然后合并。

如果您想从非欺骗的最后一个条目中提取网址,您可以更改fromLast = T

<强>结果

 page freq      URL
  ABC    1 fakeurl1
  DDD   33 fakeurl2
  DSD  555 fakeurl3

<强> Dplyr

df1 %>% 
group_by(page) %>% 
filter(row_number(URL) == 1) %>% 
inner_join(df, df1, by = "page")

<强>结果

#page  URL       freq
#<chr> <fct>    <dbl>
#ABC   fakeurl1    1.
#DDD   fakeurl2   33.
#DSD   fakeurl3  555.