2016-06-17 69 views
2

這個問題只是爲了理解爲什麼會發生這種情況。合併函數生成重複項

我合併兩個數據庫:

bot.rep.geo <- merge(x = bot.rep, y = geo.2016, by = "cod.geo", all.x = TRUE) 

原來的數據庫有以下方面:bot.rep有1634451層的意見,geo.2016有1393

使用all.x = TRUE合併後,新的數據庫1727681浮現,而不是與bot.rep相同的尺寸。

爲什麼會發生這種情況?

經過快速審查,我意識到它正在創建一些重複項,但我不明白原因,如果我在使用merge函數時做錯了什麼。

+3

通過選擇'all.x = TRUE',您在SQL中執行了等同於'LEFT JOIN'的操作。這並不意味着'bot.rep'中的給定行只會出現一次。相反,它會在'cod.geo'中出現一次,並且'bot.rep'中的每一行保證出現,即使與任何東西都不匹配。 –

+0

向我們展示一些示例數據,這將很清楚。 –

+0

謝謝@TimBiegeleisen的澄清。有什麼辦法可以防止這種情況發生,或者只是需要在事後刪除重複的內容? –

回答

1

geo.2016表中可能有cod.geo值出現兩次或多次的行。

如果您的bot.rep數據中有一個bot.rep值爲「X」,那麼geo.2016數據中包含「X」的兩行代碼,合併將複製bot.rep中的行並加入來自geo.2016的2行。

+0

謝謝!我現在看到爲什麼會發生這種情況。 –

1

發生這種情況是因爲one-to-many relationship,x有多行匹配y。

參見下面的例子,其中的 bot.repcod.geo值具有2個匹配中geo.2016數據集。因此,我們有2行1 id。另外,請注意,由於all.x = TRUE參數,我們正在爲非匹配ID創建NA行。

現在,您需要決定哪個行是重複的cod.geo值。

#dummy data 
bot.rep <- data.frame(cod.geo = 1:4) 
geo.2016 <- data.frame(cod.geo = c(1,1,3,5,6), z = 1:5) 

bot.rep.geo <- merge(x = bot.rep, y = geo.2016, 
        by = "cod.geo", all.x = TRUE) 

# cod.geo z 
# 1  1 1 
# 2  1 2 
# 3  2 NA 
# 4  3 3 
# 5  4 NA 

你會發現不同類型的merge functions here更多信息。

+1

@akrun我不這麼認爲,因爲它會問這種情況發生的原因,而不是如何合併。如果你覺得這是一個愚蠢的感覺自由地投票結束,downvote,國旗等 – zx8754

+0

我只是好奇, – akrun