在R中使用逻辑运算符比较字符串

7

我在使用R进行工作日字符串比较和设置时遇到了错误。有什么更好的方法来解决这个问题吗?

x <- c("Mon","Tue","Wed","Thu","Fri","Sat","Sun")

setDay <- function(day){
          if(day == "Sat" | "Sun"){
           return("Weekend")
          } else { 
            return("Weekday")
          }
        }

sapply(x, setDay)

这是我在RStudio中收到的错误信息:
Error in day == "Sat" | "Sun" : 
  operations are possible only for numeric, logical or complex types

3
你一次只能进行一个比较。尝试使用 day == "Sat" | day == "Sun" - Benjamin
1
@Benjamin 那并不完全正确,day %in% c("Sat", "Sun")是另一种选择。 - Frank
1
除了day %in% c("Sat","Sun")之外,@Benjamin可以…… - MichaelChirico
5
好的,如果你想要明显的更正,当然可以。 :) - Benjamin
1
此外,查看相关答案,了解您正在尝试完成的内置版本。 - MichaelChirico
1个回答

15

使用sapply来循环遍历x中的每一天并检查它是工作日还是周末,你可以通过单个矢量化操作使用ifelse%in%来完成:

ifelse(x %in% c("Sat", "Sun"), "Weekend", "Weekday")
# [1] "Weekday" "Weekday" "Weekday" "Weekday" "Weekday" "Weekend" "Weekend"

使用向量化操作的动机有两方面——它可以节省你的打字时间,同时也可以使你的代码更高效。


1
作为对 ifelse 的反驳:c("周末", "工作日")[1L+x %in% c("周六", "周日")] - Frank
6
我理解使用这种表达方式而不是“ifelse”的动机,但我发现它的可读性要差得多。 - josliber
4
我明白你的意思,只是想通过这种方式避免不必要的回答 :) - Frank
2
如果%in%语法让您感到困惑,可以使用is.element()(尽管字符更多)。 - rbatt
1
对于不熟悉的人,“那种表达式的动机”在这里。 - MichaelChirico
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接