[英]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_join
與inner_join
作用。 為了顯示這一點,我將在x2
變量中添加第二個2
。
y2 <- data.frame(x2=c(1, 2, 2), x3=c(2, 2, 2))
現在我們可以看到inner_join
和semi_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
不會重復行。 在這種情況下,即使y2
在x2
變量中有重復值, 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.