簡體   English   中英

R 中的合並導致比數據幀之一多的行

[英]merge in R results in more rows than one of the data frames

我有兩個數據框,第一個包含 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

編輯:按照 akrun 的評論。 是的,第二個數據框中有重復

nrow(unique(df2[,c("col1","col2")]))
# [1] 60263
nrow(df2)
# [1] 60431

如果同一個 {col1,col2} 組合有多個,我如何只從數據框中取一行。 當我合並時,我只想有 9994 行。

這應該有效,請務必先對df2進行排序,以便選擇正確的行。

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

這里發生了什么:我通過我們想要合並的列來合並兩個數據框,但我首先只從第二個data.frame df2選擇col1col2的任何組合的第一次出現。

如果使用data.frame調用, duplicated檢查行是否重復。 我從df2選擇col1col2 ,因此對於具有相同col1col2但其他列不同的行, duplicated返回TRUE 然后我只選擇不重復的行。

(仔細閱讀[表達式,從里到外檢查函數調用,得到中間結果)

編輯:添加了評論中建議的解釋

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM