web-dev-qa-db-fra.com

Comparer les chaînes avec l'opérateur logique dans R

J'obtiens une erreur en essayant de comparer et de définir les valeurs de chaîne de semaine en tant que "week-end" ou "jour de semaine" en utilisant R. Toutes les suggestions sur la façon d'aborder ce problème d'une meilleure manière seraient excellentes.

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

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

sapply(x, setDay)

Voici l'erreur que je retrouve dans RStudio:

Error in day == "Sat" | "Sun" : 
  operations are possible only for numeric, logical or complex types
6
Rich Bridgwater

Au lieu d'utiliser sapply pour parcourir chaque jour individuel dans x et vérifier si c'est le jour de la semaine ou le week-end, vous pouvez le faire en une seule opération vectorisée avec ifelse et %in%:

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

La motivation pour utiliser des opérations vectorisées ici est double - cela vous évitera de taper et rendra votre code plus efficace.

13
josliber