如何判断变量是否等于一组字符串?R语言ifelse语句疑问
问题解决:检测变量是否匹配一系列字符串
你的代码问题出在使用==和多值向量比较时,R会执行循环补齐的逐位置比较,而不是判断元素是否属于目标集合,这导致结果和预期不符。
正确实现方法
使用%in%运算符,它专门用于判断元素是否存在于指定的集合中,返回对应长度的逻辑向量:
方法1:保留ifelse转字符串的形式
mtcars$mpg <- as.character(mtcars$mpg) table(ifelse(mtcars$mpg %in% c("21", "18.1", "14.3"), "TRUE", "FALSE"))
方法2:更简洁的直接统计逻辑向量
不需要用ifelse转字符串,直接对%in%返回的逻辑向量做统计:
mtcars$mpg <- as.character(mtcars$mpg) table(mtcars$mpg %in% c("21", "18.1", "14.3"))
为什么原代码错误
mtcars$mpg == c("21", "18.1", "14.3")的逻辑是:将目标向量循环补齐到和mtcars$mpg相同长度,然后逐位置比较。比如第1个mpg和"21"比,第2个和"18.1"比,第3个和"14.3"比,第4个又回到"21",以此类推。这显然不是你需要的“任意匹配集合中某一个值”的逻辑,所以结果不符合预期。
内容的提问来源于stack exchange,提问作者tchoup
相关产品推荐
相关产品推荐

