如何在R语言中判断数据框某列是否包含多个分类变量之一?
问题描述
我尝试编写if语句检查数据框某列是否包含一个或另一个分类变量,使用%in%运算符时,单个变量检查正常:
if("setosa" %in% iris$Species){ print("hi") } # 输出:[1] "hi"
但使用OR条件时报错:
# 因"setosa"在Species列中,本应返回TRUE if(("setosa" | "new") %in% iris$Species){ print("hi") } # 错误信息: Error in "setosa" | "virginica" : operations are possible only for numeric, logical or complex types
请问该如何实现这一需求?
解决方法
方法1:用any()配合向量版%in%
把需要检查的多个分类变量放到一个向量中,用%in%得到每一个值是否存在的逻辑向量,再用any()判断是否至少有一个值存在:
if(any(c("setosa", "new") %in% iris$Species)){ print("hi") } # 输出:[1] "hi"
方法2:用intersect()判断交集长度
通过计算待检查向量与列值的交集长度,若长度大于0则说明至少有一个值存在:
if(length(intersect(c("setosa", "new"), iris$Species)) > 0){ print("hi") } # 输出:[1] "hi"
错误原因说明
你之前的写法("setosa" | "new")是错误的:|是逻辑或运算符,仅支持对逻辑值、数值或复数类型进行运算,不能直接用于字符串,因此触发类型不匹配的报错。
内容的提问来源于stack exchange,提问作者emr2
相关产品推荐
相关产品推荐

