簡體   English   中英

dplyr semi_join不應該返回重復項,但確實如此

[英]dplyr semi_join is not supposed to return duplicates but it does

dplyr包中的CRAN文檔,參考semi_join狀態: "A semi join differs from an inner join because an inner join will return one row of x for each matching row of y, where a semi join will never duplicate rows of x"

但是,以下代碼似乎在輸出中提供了重復的x行:

x <- data.frame(x1=c(1,1,2), x2=c(2,2,2))
y <- data.frame(x2=c(1,2), x3=c(2,2))
c <- semi_join(x,y)

這段代碼是否與文檔相矛盾,還是我遺漏了一些明顯的東西?

你的結果是我從semi_join - x中的每一行都被返回一次。 連接不會刪除x重復行,這可能是您如何考慮這一點。 為此,您可能對dplyr distinct 感興趣

為了更好地理解所有這些,可能有助於比較在使用連接變量的重復值定義ay數據集時semi_joininner_join作用。 為了顯示這一點,我將在x2變量中添加第二個2

y2 <- data.frame(x2=c(1, 2, 2), x3=c(2, 2, 2)) 

現在我們可以看到inner_joinsemi_join會發生什么。 首先,我們看到inner_join重復行; 即,它返回x每一行兩次。

inner_join(x, y2)
Joining by: "x2"
  x1 x2 x3
1  1  2  2
2  1  2  2
3  1  2  2
4  1  2  2
5  2  2  2
6  2  2  2

但是,正如幫助頁面所述, semi_join不會重復行。 在這種情況下,即使y2x2變量中有重復值, x每一行也會返回一次。

semi_join(x, y2)
Joining by: "x2"
  x1 x2
1  1  2
2  1  2
3  2  2

暫無
暫無

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

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