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
相关产品推荐
相关产品推荐

