A: impedisce a ifelse() di convertire la data in numerico


La funzione ifelse() in base R converte gli oggetti data in oggetti numerici per impostazione predefinita.

Per evitare che ciò accada, è possibile utilizzare in alternativa uno dei seguenti metodi:

Metodo 1: utilizzare as.character() in Base R

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

Metodo 2: utilizzare if_else() in dplyr

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

Metodo 3: utilizzare fifelse() in data.table

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

I seguenti esempi mostrano come utilizzare ciascun metodo nella pratica con il seguente frame di dati in 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

        dirty date
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

Esempio 1: utilizzare as.character() in Base R

Il codice seguente mostra come utilizzare la funzione as.character() con la funzione R base ifelse() per eseguire un’istruzione if else sulla colonna della data del frame di dati e produrre una data come risultato:

 #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

        dirty dates
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

Se un valore nella colonna della data era precedente al 20/01/2022, abbiamo aggiunto cinque giorni alla data.

Tieni presente che la colonna della data ha mantenuto il formato data invece di essere convertita in un formato numerico.

Esempio 2: utilizzare if_else() in dplyr

Il codice seguente mostra come utilizzare la funzione if_else() di dplyr per eseguire un’istruzione if else sulla colonna della data nel frame di dati e produrre una data come risultato:

 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

        dirty date
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

Se un valore nella colonna della data era precedente al 20/01/2022, abbiamo aggiunto cinque giorni alla data.

Tieni presente che la colonna della data ha mantenuto il formato data invece di essere convertita in un formato numerico.

Esempio 3: utilizzare fifelse() in data.table

Il codice seguente mostra come utilizzare la funzione fifelse() di data.table per eseguire un’istruzione if else sulla colonna della data nel frame di dati e produrre una data come risultato:

 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

        dirty dates
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

Se un valore nella colonna della data era precedente al 20/01/2022, abbiamo aggiunto cinque giorni alla data.

Ancora una volta, la colonna della data ha mantenuto il formato data invece di essere convertita in un formato numerico.

Nota : per frame di dati estremamente grandi, i metodi dplyr e data.table saranno più veloci del metodo R di base.

Risorse addizionali

I seguenti tutorial spiegano come eseguire altre attività comuni in R:

Come scrivere un’istruzione If Else annidata in R
Come scrivere una dichiarazione di caso in R
Come aggiungere più colonne al frame di dati in R

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *