R 如何找到两个向量中相同元素的数量?
我有两个向量:R 如何找到两个向量中相同元素的数量?,r,R,我有两个向量: a <- letters[1:5] b <- c('a','k','w','p','b','b') 我该怎么办?将b转换成一个系数,其级别由a指定。不在a中的值将变为。制表时,它们将被丢弃(除非您指定useNA=“ifany”) 替代解决方案。可以修改匿名函数,以实现与包的模糊名称匹配,例如stringdisttablate工作在整数向量上,速度很快;将你的字母与可能的字母进行匹配,然后将索引制成表格;使用length(a)确保每个可能的值都有一个计数 >
a <- letters[1:5]
b <- c('a','k','w','p','b','b')
我该怎么办?将
b
转换成一个系数,其级别由a
指定。不在a
中的值将变为
。制表时,它们将被丢弃(除非您指定useNA=“ifany”
)
替代解决方案。可以修改匿名函数,以实现与包的模糊名称匹配,例如
stringdist
tablate
工作在整数向量上,速度很快;将你的字母与可能的字母进行匹配,然后将索引制成表格;使用length(a)
确保每个可能的值都有一个计数
> tabulate(match(b, a), length(a))
[1] 1 2 0 0 0
这比“显而易见的”table()解决方案快
然后
> microbenchmark(f0(), f1())
Unit: microseconds
expr min lq median uq max neval
f0() 566.824 576.2985 582.950 594.4200 798.275 100
f1() 56.816 60.0180 63.305 65.4185 120.441 100
但也更一般,例如,不强制使用字符串表示。似乎是我的家庭作业什么?什么意思?
>sapply(a, function(x) sum(x==b))
a b c d e
1 2 0 0 0
> tabulate(match(b, a), length(a))
[1] 1 2 0 0 0
library(microbenchmark)
f0 = function() table(factor(b,levels=a))
f1 = function() tabulate(match(b, a), length(a))
> microbenchmark(f0(), f1())
Unit: microseconds
expr min lq median uq max neval
f0() 566.824 576.2985 582.950 594.4200 798.275 100
f1() 56.816 60.0180 63.305 65.4185 120.441 100