web-dev-qa-db-ja.com

Rで論理演算子を使用して文字列を比較する

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
6
Rich Bridgwater

sapplyを使用してxの各日をループし、それが平日か週末かを確認する代わりに、ifelseと_%in%_:

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

ここでベクトル化された操作を使用する動機は2つあります。これにより、入力を節約でき、コードがより効率的になります。

13
josliber