我有两个很长的向量:
a <- sample(1e+08L, size = 1e+09L, replace = TRUE)
b <- sample(1e+08L, size = 1e+09L, replace = TRUE)
我想生成一个长度为length(a)
的整数向量r
,使得r[i]
是a[i]
在b
中的索引。
我试过pmatch(a, b)
但是很慢。有没有更有效的方法?
小示例的预期输出:
a <- c(1, 3, 5, 7, 8)
b <- c(3, 1, 7, 8, 5)
f(a, b)
## [1] 2 1 5 3 4
6条答案
按热度按时间wf82jlnq1#
您的问题提到了
pmatch
,它执行字符向量的部分匹配,但您似乎需要match
,它执行整数和其他向量的精确匹配。match
更快,但比match
更快的是fastmatch::fmatch
:在基准测试中添加:
x一个一个一个一个x一个一个二个x
omjgkv6w2#
基准:
结果
pn9klfpd3#
或者,你可以创建一个哈希表(由于某种原因,它不存在于基R中),然后你可以在O(1)时间内查找
b
中每个元素的索引。qlzsbp2j4#
转换为 * 数据.表 * 并 * 合并 *:
ttygqcqt5#
根据GKi的评论更新。
如果
a
和b
都是整数向量,并且length(b)
~max(b)
,索引将更快:whhtz7ly6#
如果目标只是
match()
,那么我们可以用途: