我想了解R中的match
和intersect
之間的區別。兩者都以不同的格式返回相同的輸出。兩者之間是否有功能差異?R中的相交和匹配之間的區別
match(names(set1), names(set2))
# [1] NA 1 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 11
intersect(names(set1), names(set2))
# [1] "Year" "ID"
我想了解R中的match
和intersect
之間的區別。兩者都以不同的格式返回相同的輸出。兩者之間是否有功能差異?R中的相交和匹配之間的區別
match(names(set1), names(set2))
# [1] NA 1 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 11
intersect(names(set1), names(set2))
# [1] "Year" "ID"
match(a, b)
返回length(a)
的整數向量,與第i
元件賦予位置j
使得a[i] == b[j]
。 NA
默認生成爲no_match(雖然您可以自定義它)。
如果你想獲得相同的結果intersect(a, b)
,使用下列的:
b[na.omit(match(a, b))]
a[na.omit(match(b, a))]
例
a <- 1:5
b <- 2:6
b[na.omit(match(a, b))]
# [1] 2 3 4 5
a[na.omit(match(b, a))]
# [1] 2 3 4 5
我只是想知道是否有兩者之間的任何其他差異。我自己能夠理解結果。
然後我們讀到的源代碼
intersect
#function (x, y)
#{
# y <- as.vector(y)
# unique(y[match(as.vector(x), y, 0L)])
#}
事實證明,intersect
被寫在match
方面!
哈哈,貌似我在外面忘了unique
。 Em,通過設置nomatch = 0L
我們也可以擺脫na.omit
。那麼,R核心比我的猜測更有效率。
後續
我們也可以使用
a[a %in% b] ## need a `unique`, too
b[b %in% a] ## need a `unique`, too
然而,對?match
一讀。在「詳細信息」,我們可以看到"%in%"
是如何定義的:
"%in%" <- function(x, table) match(x, table, nomatch = 0) > 0
所以,是的,一切都在使用match
寫的。
我只是想知道兩者之間是否存在其他差異。我自己能夠理解結果。謝謝! – goutam
http://www.rexamples.com/12/Match()比賽ID中的更多變化說。考慮使用不匹配和不可兼容性。 http://www.endmemo.com/program/R/match.php –