[英]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
選擇col1
和col2
的任何組合的第一次出現。
如果使用data.frame
調用, duplicated
檢查行是否重復。 我從df2
選擇col1
和col2
,因此對於具有相同col1
和col2
但其他列不同的行, duplicated
返回TRUE
。 然后我只選擇不重復的行。
(仔細閱讀[
表達式,從里到外檢查函數調用,得到中間結果)
編輯:添加了評論中建議的解釋
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.