R中相交和匹配的区别
Difference between intersect and match in R
我试图了解 R 中 match
和 intersect
之间的区别。两者 return 以不同的格式输出相同的内容。两者在功能上有什么区别吗?
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)
returns 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
I just wanted to know if there any other differences between the both. I was able to understand the results myself.
然后我们阅读源码
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 core 比我猜的更有效率。
跟进
我们也可以使用
a[a %in% b] ## need a `unique`, too
b[b %in% a] ## need a `unique`, too
但是,请阅读 ?match
。在 "Details" 中我们可以看到 "%in%"
是如何定义的:
"%in%" <- function(x, table) match(x, table, nomatch = 0) > 0
所以,是的,所有内容都是使用 match
编写的。
我试图了解 R 中 match
和 intersect
之间的区别。两者 return 以不同的格式输出相同的内容。两者在功能上有什么区别吗?
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)
returns 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
I just wanted to know if there any other differences between the both. I was able to understand the results myself.
然后我们阅读源码
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 core 比我猜的更有效率。
跟进
我们也可以使用
a[a %in% b] ## need a `unique`, too
b[b %in% a] ## need a `unique`, too
但是,请阅读 ?match
。在 "Details" 中我们可以看到 "%in%"
是如何定义的:
"%in%" <- function(x, table) match(x, table, nomatch = 0) > 0
所以,是的,所有内容都是使用 match
编写的。