You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言中高效匹配向量x所有值于向量y的方法(无部分匹配)

高效匹配向量中所有值的对应位置(非仅首个匹配)

需求描述

需要实现类似pmatch()默认行为但无部分匹配的功能:找到向量x中每个值在向量y中的对应出现位置,而非match()仅返回的首个匹配位置。具体规则为:x中第k次出现的某值,对应y中该值的第k次出现的位置;若y中该值的出现次数少于k,则返回NA。

示例代码

x <- c(3L, 1L, 2L, 3L, 3L, 2L)
y <- c(3L, 3L, 3L, 3L, 1L, 3L)

预期输出

pmatch(x, y)  
[1]  1  5 NA  2  3 NA

当前实现的问题

目前使用ave()方法实现,但随着分组数量增加,该方法速度变慢且内存效率极低:

ave(x, x, FUN = \(v) which(y == v[1])[1:length(v)])
[1]  1  5 NA  2  3 NA

求助

求推荐高效的实现方式,优先使用base R实现,非base R方案也可接受。

基准测试用大数据集

set.seed(5)
x <- sample(5e3, 1e5, replace = TRUE)
y <- sample(x, replace = TRUE)

内容的提问来源于stack exchange,提问作者iroha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 01:02:45