比较字符串与R中的逻辑运算符

Ric*_*ter 6 string compare r function logical-operators

我试图比较并将工作日字符串值设置为使用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)
Run Code Online (Sandbox Code Playgroud)

这是我在RStudio中得到的错误:

Error in day == "Sat" | "Sun" : 
  operations are possible only for numeric, logical or complex types
Run Code Online (Sandbox Code Playgroud)

jos*_*ber 12

而不是使用sapply通过每个人一天中循环x,并检查它是否是平日还是周末,你可以在一个单一的量化操作做到这一点ifelse%in%:

ifelse(x %in% c("Sat", "Sun"), "Weekend", "Weekday")
# [1] "Weekday" "Weekday" "Weekday" "Weekday" "Weekday" "Weekend" "Weekend"
Run Code Online (Sandbox Code Playgroud)

在这里使用矢量化操作的动机是双重的 - 它将节省您的输入,它将使您的代码更有效.

  • @Frank我理解这种表达的动机而不是`ifelse`,但我发现它的可读性要低得多. (6认同)
  • 我和你在一起; 只是试图用这种方法防止不必要的答案:) (4认同)
  • 另外,如果`%in%`语法混淆了你,你可以使用`is.element()`(虽然占用更多的字符) (2认同)