考虑两个数据帧, df1 和 df2 。
df1具有 id , a , b 列。
df2具有 id , a , c 列。
我想执行左连接,以便组合的数据框具有列 id , a , b , c 。
combined <- df1 %>% left_join(df2, by="id")
但是在组合数据框中,列为 id , ax , b , ay , c 。
我可以在联接键中包含“ a”(即left_join(df1, df2, by=c("id", "a"))
),但是像 a 这样的列太多了。我只想通过主键 id 加入,并将所有重复的列都放在df2中。
答案 0 :(得分:1)
更通用的方法是在左联接之前删除列,否则合并的数据集最初可能非常大:
df1<- data.frame(id= seq(1:0), a=rnorm(1:10,0.2),b=rpois(10,0.2))
df2<- data.frame(id= seq(1:0), a=rnorm(1:10,0.2),c=rnorm(10,0.2))
varList<- names(df2)[!(names(df2) %in% names(df1))] # get non common names
varList<- c(varList,"id") # appending key parameter
combined <- df1 %>% left_join((df2 %>% select(varList)), by="id")
组合数据集将没有任何.x或.y
答案 1 :(得分:0)
首先,我们通过 id
执行联接combined <- df1 %>% left_join(df2, by="id")
然后我们用 .x 重命名并删除 .y
combined <- combined %>%
rename_at(
vars(ends_with(".x")),
~str_replace(., "\\..$","")
) %>%
select_at(
vars(-ends_with(".y"))
)
答案 2 :(得分:0)
我认为这是实现您想要做的事情的最简单方法
df <- left_join(df1, df2, by = "id", suffix = c("", ".annoying_duplicate_column")) %>%
select(-ends_with(".annoying_duplicate_column"))
(结合@Ernest Han 的回答和上面@David T 的非常有用的评论)