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