R语言向量按序匹配需求:解决全实例匹配问题
按顺序匹配向量元素的解决方法
这个问题我之前也碰到过,grep确实会返回所有匹配项,完全没法满足你要的按顺序匹配需求。不过我们可以给每个重复元素加上「出现次数」的标记,让原本重复的元素变成唯一标识,这样就能精准找到对应位置了!
具体步骤和代码实现
首先先定义你的原始数据:
x <- c("a", "b", "c", "d", "a", "b", "c") y <- structure(c(1, 2, 3, 4, 5, 6, 7, 8), .Names = c("a", "e", "b", "c", "d", "a", "b", "c"))
1. 给x中的元素添加出现序号
我们用ave函数统计每个元素在x里是第几次出现,再和原元素拼接:
x_with_count <- paste0(x, "_", ave(seq_along(x), x, FUN = seq_along)) # 结果是:"a_1" "b_1" "c_1" "d_1" "a_2" "b_2" "c_2"
2. 给y的名字添加出现序号
同样的方法处理y的名字,让每个名字带上它的出现次数:
y_names_with_count <- paste0(names(y), "_", ave(seq_along(y), names(y), FUN = seq_along)) # 结果是:"a_1" "e_1" "b_1" "c_1" "d_1" "a_2" "b_2" "c_2"
3. 精准匹配位置
用match函数匹配处理后的x和y的名字,就能得到你要的按序匹配位置:
matched_positions <- match(x_with_count, y_names_with_count)
运行后得到的结果是:
> matched_positions [1] 1 3 4 5 6 7 8
这个结果完全符合你的需求:x[2]匹配y[3],x[5]匹配y[6],每个元素都对应了y里同类型的第n次出现的位置。
内容的提问来源于stack exchange,提问作者Sati
相关产品推荐
相关产品推荐

