R语言中如何仅提取同时存在于另一向量中的向量元素
R语言提取两个向量共有元素的实现方法
针对x、y均为向量类型、需提取x中同时存在于y的元素的需求,可根据是否需要去重的场景选择对应实现:
- 场景1:需要自动去重,匹配集合交集的标准运算
直接使用R基础包内置的intersect()函数,函数原生设计目标就是计算两个输入向量的交集,元素顺序以第一个传入的向量排序为准。
复现示例的完整代码:
运行后输出的结果为# 构造示例输入向量 x <- c("a", "b", "c", "d", "e") y <- c("a", "z", "m", "d", "e", "g") # 计算交集得到目标结果 r <- intersect(x, y)c("a", "d", "e"),和预期完全一致。
注意:示例中的a、b等字符元素需要加英文引号包裹,否则R会将其识别为未定义的变量名,导致运行报错。 - 场景2:需要保留x向量中的原有重复元素,仅过滤掉不存在于y的内容
可以用%in%运算符构造布尔索引筛选x中的元素,实现代码:
这类写法和r <- x[x %in% y]intersect()的核心区别是:如果x中存在重复的共有元素,该写法会完整保留x里的重复值,而intersect()会自动对结果去重,使用时可根据自身数据的去重需求选择对应方法。
内容的提问来源于stack exchange,提问作者giegie
相关产品推荐
相关产品推荐

