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