R中的合并产生的行数多于其中一个数据帧

tub*_*bby 7 merge r dataframe rstudio

我有两个数据帧,第一个包含9994行,第二个包含60431行.我想合并两个数据帧,使合并的数据帧包含两个数据帧的组合列,但只包含9994行.

但是,合并后我获得超过9994行.我怎样才能确保不会发生这种情况?

df1 = readRDS('data1.RDS')
nrow(df1)
# [1] 9994

df2 = readRDS('data2.RDS')
nrow(df2)
# [1] 60431

df = merge(df1,df2,by=c("col1","col2"))
nrow(df)
# [1] 10057

df = merge(df1,df2,by=c("col1","col2"),all.x=TRUE)
nrow(df)
# [1] 10057
nrow(na.omit(df))
# [1] 10057
Run Code Online (Sandbox Code Playgroud)

编辑:遵循akrun的评论.是的,第二个数据框中有重复项

nrow(unique(df2[,c("col1","col2")]))
# [1] 60263
nrow(df2)
# [1] 60431
Run Code Online (Sandbox Code Playgroud)

如果同一{col1,col2}组合有多个,如何从数据框中只取一行.当我合并时,我想只有9994行.

sna*_*aut 2

这应该可行,请务必df2先排序,以便选择正确的行。

df = merge(
  df1,
  df2[!duplicated(df2[, c("col1","col2")]), ],
  by=c("col1","col2"),
  all.x=TRUE
)
Run Code Online (Sandbox Code Playgroud)

这里发生的情况:我按我们想要合并的列合并两个数据框,但我首先仅选择第二个 中和 的col1任何组合的第一个出现。col2data.frame df2

duplicated如果使用 . 调用,则检查行是否重复data.frame。我选择col1col2from df2,因此duplicated返回其他列中TRUE具有相同col1col2不同的行。然后我只选择不重复的行。

[仔细阅读-表达式,并从内到外检查函数调用,以获得中间结果)

编辑:按照评论中的建议添加解释