考虑两个 Dataframe ,df1 和 df2。
df1具有列 id、a、B。
df2具有列 id、a、c。
我想执行左连接,使得组合的 Dataframe 具有列 id,a,b,c。
combined <- df1 %>% left_join(df2, by="id")
但是在组合 Dataframe 中,列是 id、a.x、b、a.y、c。
我可以在连接键中包含“a”(即:left_join(df1, df2, by=c("id", "a"))
)但是像 a 这样的列太多了。我想只通过主键 id 连接,并删除df2中所有重复的列。
6条答案
按热度按时间col17t5w1#
我喜欢用尽可能少的步骤来做事情。我认为这会减少步骤的数量:
select命令中的减号意味着你要选择除这些变量之外的所有内容。如果你想删除所有重复的列(根本没有列a),你可以这样做:
omjgkv6w2#
首先我们通过 id 执行连接
然后我们用 .x 重命名它们,用 .y 删除它们
xqnpmsa83#
更通用的方法是在左连接之前删除列,否则组合数据集最初可能非常大:
组合数据集将不包含任何.x或.y
rjzwgtxy4#
我认为这是最简单的方法来实现你所要做的
(结合@Ernest Han的回答和上面@大卫T的非常有帮助的评论)
v2g6jxz65#
通过 “there is too many of columns like a”,你的意思是你想找到两个源中共有的所有列吗?在这种情况下,为什么不直接使用交集(默认行为)呢?
由reprex package(v0.3.0)于2020年5月6日创建
svdrlsy46#
一个简单的解决方案可能是:
换句话说,它将删除已经存在于df 2中的列。