A: voorkom dat ifelse() datum naar numeriek converteert


De functie ifelse() in base R converteert datumobjecten standaard naar numerieke objecten.

Om dit te voorkomen, kunt u als alternatief een van de volgende methoden gebruiken:

Methode 1: Gebruik as.character() in Base R

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

Methode 2: Gebruik if_else() in dplyr

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

Methode 3: Gebruik fifelse() in data.table

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

De volgende voorbeelden laten zien hoe u elke methode in de praktijk kunt gebruiken met het volgende dataframe 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

Voorbeeld 1: Gebruik as.character() in Base R

De volgende code laat zien hoe u de functie as.character() gebruikt met de functie R base ifelse() om een if else-instructie uit te voeren op de datumkolom van het dataframe en als resultaat een datum te produceren:

 #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

Als een waarde in de datumkolom vóór 20-01-2022 lag, hebben we vijf dagen aan de datum toegevoegd.

Houd er rekening mee dat de datumkolom zijn datumnotatie heeft behouden in plaats van te zijn geconverteerd naar een getalnotatie.

Voorbeeld 2: Gebruik if_else() in dplyr

De volgende code laat zien hoe u de if_else()- functie van dplyr kunt gebruiken om een if else-instructie uit te voeren op de datumkolom in het dataframe en als resultaat een datum te produceren:

 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

Als een waarde in de datumkolom vóór 20-01-2022 lag, hebben we vijf dagen aan de datum toegevoegd.

Houd er rekening mee dat de datumkolom zijn datumnotatie heeft behouden in plaats van te zijn geconverteerd naar een getalnotatie.

Voorbeeld 3: Gebruik fifelse() in data.table

De volgende code laat zien hoe u de functie fifelse() van data.table gebruikt om een if else-instructie uit te voeren op de datumkolom in het dataframe en als resultaat een datum te produceren:

 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

Als een waarde in de datumkolom vóór 20-01-2022 lag, hebben we vijf dagen aan de datum toegevoegd.

Opnieuw behield de datumkolom zijn datumnotatie in plaats van te worden geconverteerd naar een getalnotatie.

Opmerking : voor extreem grote dataframes zijn de methoden dplyr en data.table sneller dan de basis-R-methode.

Aanvullende bronnen

In de volgende tutorials wordt uitgelegd hoe u andere veelvoorkomende taken in R kunt uitvoeren:

Hoe schrijf je een geneste If Else-instructie in R
Hoe schrijf je een casusverklaring in R
Hoe meerdere kolommen aan een dataframe toe te voegen in R

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert