从left_join删除相同的列 [英] Remove same columns from left_join

查看:597
本文介绍了从left_join删除相同的列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想通过 id 合并两个数据框,但是它们都具有2个相同的列;因此,当我合并时,会得到新的 .x .y 列。如何将这两个数据框与 left_join()合并,并删除当前代码中相同的额外列( element.x,day.x,元素。 y和day.y),并保留一列。

I'd like to merge two data frames by id, but they both have 2 of the same columns; therefore, when I merge i get new .x and .y columns. How can I merge these two data frames with left_join() and remove the extra columns currently in my code that are the same (`element.x, day.x, element.y, and day.y) and keep a single column.

代码:

# Sample data
df1 <- data.frame(id = seq(1,5), value1 = rnorm(5), element = "TEST1", day = 15) 
df2 <- data.frame(id = seq(1,5), value2 = rnorm(5), element = "TEST1", day = 15) 

# Merge
df <- left_join(df1, df2, by = "id")

# Output
  id      value1 element.x day.x     value2 element.y day.y
1  1 -0.69700149     TEST1    15  1.4324220     TEST1    15
2  2 -0.25514949     TEST1    15  0.7281354     TEST1    15
3  3  0.09206902     TEST1    15  0.8148839     TEST1    15
4  4  2.51799237     TEST1    15  1.3919671     TEST1    15
5  5 -0.77049050     TEST1    15 -0.2707201     TEST1    15


推荐答案

只需丢弃所有内容而不是 df2 -在这种情况下, id value2 列:

Just drop everything you don't want from df2 - in this case the id and value2 columns:

left_join(df1, select(df2, c(id,value2)), by = "id")

#  id     value1 element day     value2
#1  1  1.2276303   TEST1  15 -0.1389861
#2  2 -0.8017795   TEST1  15 -0.5973131
#3  3 -1.0803926   TEST1  15 -2.1839668
#4  4 -0.1575344   TEST1  15  0.2408173
#5  5 -1.0717600   TEST1  15 -0.2593554

请注意,并非所有这些答案都是等效的,并询问结果是什么。例如:

Beware that not all these answers are equivalent, and ask what it is you need as a result. E.g.:

df1 <- data.frame(id=1:3,day=2:4,element=3:5,value1=100:102)
df2 <- data.frame(id=1:3,day=3:5,element=4:6,value2=200:202)
df1

#  id day element value1
#1  1   2       3    100
#2  2   3       4    101
#3  3   4       5    102

df2
#  id day element value2
#1  1   3       4    200
#2  2   4       5    201
#3  3   5       6    202

left_join(df1, df2)
#Joining by: c("id", "day", "element")
#  id day element value1 value2
#1  1   2       3    100     NA
#2  2   3       4    101     NA
#3  3   4       5    102     NA

left_join(df1, select(df2, c(id,value2)), by = "id")
#  id day element value1 value2
#1  1   2       3    100    200
#2  2   3       4    101    201
#3  3   4       5    102    202

这篇关于从left_join删除相同的列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆