R : empêcher ifelse() de convertir la date en numérique



La fonction ifelse() en base R convertit les objets date en objets numériques par défaut.

Pour éviter que cela ne se produise, vous pouvez utiliser l’une des méthodes suivantes comme alternative :

Méthode 1 : utiliser as.character() dans Base R

df$date <- as.Date(ifelse(df$date < '2022-01-20',
                   as.character(df$date+5),
                   as.character(df$date)))

Méthode 2 : utilisez if_else() dans dplyr

df$date <- if_else(df$date < '2022-01-20', df$date+5, df$date)

Méthode 3 : utilisez fifelse() dans data.table

df$date <- fifelse(df$date < '2022-01-20', df$date+5, df$date)

Les exemples suivants montrent comment utiliser chaque méthode en pratique avec le bloc de données suivant dans R :

#create data frame
df <- data.frame(date=as.Date(c('2022-01-05', '2022-01-17', '2022-01-22',
                        '2022-01-23', '2022-01-29', '2022-02-13')),
                 sales=c(22, 35, 24, 20, 16, 19))

#view data frame
df

        date sales
1 2022-01-05    22
2 2022-01-17    35
3 2022-01-22    24
4 2022-01-23    20
5 2022-01-29    16
6 2022-02-13    19

Exemple 1 : utiliser as.character() dans Base R

Le code suivant montre comment utiliser la fonction as.character() avec la fonction ifelse() de la base R pour effectuer une instruction if else sur la colonne date du bloc de données et produire une date en conséquence :

#if date is before 2022-01-20 then add 5 days
df$date <- as.Date(ifelse(df$date < '2022-01-20',
                   as.character(df$date+5),
                   as.character(df$date)))

#view updated data frame
df

        date sales
1 2022-01-10    22
2 2022-01-22    35
3 2022-01-22    24
4 2022-01-23    20
5 2022-01-29    16
6 2022-02-13    19

Si une valeur dans la colonne de date était antérieure au 20/01/2022, nous avons ajouté cinq jours à la date.

Notez que la colonne de date a conservé son format de date au lieu d’être convertie en format numérique.

Exemple 2 : utilisez if_else() dans dplyr

Le code suivant montre comment utiliser la fonction if_else() de dplyr pour effectuer une instruction if else sur la colonne de date dans le bloc de données et produire une date en conséquence :

library(dplyr)

#if date is before 2022-01-20 then add 5 days
df$date <- if_else(df$date < '2022-01-20', df$date+5, df$date)

#view updated data frame
df

        date sales
1 2022-01-10    22
2 2022-01-22    35
3 2022-01-22    24
4 2022-01-23    20
5 2022-01-29    16
6 2022-02-13    19

Si une valeur dans la colonne de date était antérieure au 20/01/2022, nous avons ajouté cinq jours à la date.

Notez que la colonne de date a conservé son format de date au lieu d’être convertie en format numérique.

Exemple 3 : utilisez fifelse() dans data.table

Le code suivant montre comment utiliser la fonction fifelse() de data.table pour effectuer une instruction if else sur la colonne de date dans le bloc de données et produire une date en conséquence :

library(data.table)

#if date is before 2022-01-20 then add 5 days
df$date <- fifelse(df$date < '2022-01-20', df$date+5, df$date)

#view updated data frame
df

        date sales
1 2022-01-10    22
2 2022-01-22    35
3 2022-01-22    24
4 2022-01-23    20
5 2022-01-29    16
6 2022-02-13    19

Si une valeur dans la colonne de date était antérieure au 20/01/2022, nous avons ajouté cinq jours à la date.

Encore une fois, la colonne date a conservé son format de date au lieu d’être convertie en format numérique.

Remarque : Pour les trames de données extrêmement volumineuses, les méthodes dplyr et data.table seront plus rapides que la méthode de base R.

Ressources additionnelles

Les didacticiels suivants expliquent comment effectuer d’autres tâches courantes dans R :

Comment écrire une instruction If Else imbriquée dans R
Comment rédiger une déclaration de cas dans R
Comment ajouter plusieurs colonnes au bloc de données dans R

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *