合并DF时删除重复项

时间:2017-08-23 18:16:32

标签: r merge

我知道,我知道......另一个合并的Df问题,请听我说,因为我已经搜索了SO以获得答案,但没有一个问题。

我正在合并两个Df,一个小于另一个,并进行左合并,以将较长的DF与较小的DF匹配。

除了一个问题之外,这很有效,当右(较长)df有重复时,行会被添加到左边(较小)df。

一个例子:

Row<-c("a","b","c","d","e")
Data<-(1:5)
df1<-data.frame(Row,Data)

Row2<-c("a","b","b","c","d","e","f","g","h")
Data2<-(1:9)
df2<-data.frame(Row2,Data2)

names(df2)<-c("Row","Data2")

DATA<-merge(x = df1, y = df2, by = "Row", all.x = TRUE)

>DATA
  Row Data Data2
1   a    1     1
2   b    2     2
3   b    2     3
4   c    3     4
5   d    4     5
6   e    5     6

查看额外的&#34; b&#34; row?,这就是我想要摆脱的,我想保留左DF,但非常严格,如果在DF1中有5行,当合并时我希望那里只有5行。

喜欢这个......

  Row Data Data2
1   a    1     1
2   b    2     2
3   c    3     4
4   d    4     5
5   e    5     6

只需要第一场比赛并继续前进。

我意识到合并功能只在这里完成它的工作,那么还有另一种方法来实现我的预期结果吗?或者是否应该进行合并后修改。

感谢您的帮助和时间。

研究: How to join (merge) data frames (inner, outer, left, right)?

deleting duplicates

Merging two data frames with different sizes and missing values

3 个答案:

答案 0 :(得分:3)

我们可以使用duplicated函数,如下所示:

DATA[!duplicated(DATA$Row),]

  Row Data Data2
1   a    1     1
2   b    2     2
4   c    3     4
5   d    4     5
6   e    5     6

答案 1 :(得分:1)

也可能像

merge(x = df1, y = df1[unique(df1$Row),], by = "Row", all.x = TRUE)
#  Row Data.x Data.y
#1   a      1      1
#2   b      2      2
#3   c      3      3
#4   d      4      4
#5   e      5      5

答案 2 :(得分:0)

由于您只想要第一行并且不关心选择哪些变量,因此您可以使用此代码(在合并之前):

Row2<-c("a","b","b","c","d","e","f","g","h")
Data2<-(1:9)
df2<-data.frame(Row2,Data2)

library(dplyr)

df2 %>%
  group_by(Row2) %>%
  slice(1)