R语言如何检查向量值存在于数据框指定列并返回单个布尔值
R语言实现单值存在性判断的方法
你之前使用%in%运算符无法得到单个布尔值,核心原因是:%in%为逐元素匹配逻辑,返回结果的长度与左侧输入向量完全一致,比如直接执行my_values %in% df$code,会得到长度为2的逻辑向量c(TRUE, TRUE),不会自动聚合为单值结果。
你可以根据实际的匹配规则,搭配base R自带的聚合函数,直接得到符合要求的单个布尔值。
对应不同判断规则的实现
- 判断规则:my_values的所有值都存在于df的code列中
使用all()函数包裹逐元素匹配结果,即可将多值逻辑聚合为单个结果:
以上代码运行后将直接返回单个all(my_values %in% df$code)TRUE;只要my_values中存在任意一个不在code列的值,结果就会返回FALSE。 - 判断规则:my_values中只要有任意一个值存在于df的code列中
使用any()函数包裹逐元素匹配结果,即可聚合为单个结果:
以上代码运行后将直接返回单个any(my_values %in% df$code)TRUE;哪怕my_values与code列只有1个共同值,结果就会返回TRUE。
小提示:也可以通过计算两向量交集长度判断存在性(如
length(intersect(my_values, df$code)) > 0),但这类写法在向量长度较大时性能远低于上述any()/all()的实现,因为需要提前存储所有匹配的交集元素。
内容的提问来源于stack exchange,提问作者Beans On Toast
相关产品推荐
相关产品推荐

