我知道,我知道......另一个合并的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)?
Merging two data frames with different sizes and missing values
答案 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)