Odp.: uniemożliwić ifelse() konwersję daty na liczbę
Funkcja ifelse() w podstawowym R domyślnie konwertuje obiekty daty na obiekty numeryczne.
Aby temu zapobiec, możesz alternatywnie zastosować jedną z następujących metod:
Metoda 1: Użyj as.character() w Base R
df$date <- as. Date (ifelse(df$date < ' 2022-01-20 ', as. character (df$date+5), as. character (df$date)))
Metoda 2: Użyj if_else() w dplyr
df$date <- if_else(df$date < ' 2022-01-20 ', df$date+5, df$date)
Metoda 3: Użyj fifelse() w data.table
df$date <- fifelse(df$date < ' 2022-01-20 ', df$date+5, df$date)
Poniższe przykłady pokazują, jak w praktyce wykorzystać każdą metodę z następującą ramką danych w 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
Przykład 1: Użyj as.character() w Base R
Poniższy kod pokazuje, jak używać funkcji as.character() z podstawową funkcją R ifelse() w celu wykonania instrukcji if else w kolumnie daty ramki danych i wygenerowania w rezultacie daty:
#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
Jeśli wartość w kolumnie daty była wcześniejsza niż 20.01.2022, dodaliśmy do daty pięć dni.
Należy zauważyć, że kolumna daty zachowała swój format daty, zamiast zostać przekonwertowana na format liczbowy.
Przykład 2: Użyj if_else() w dplyr
Poniższy kod pokazuje, jak użyć funkcji if_else() programu dplyr do wykonania instrukcji if else w kolumnie daty w ramce danych i wygenerowania w rezultacie daty:
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
Jeśli wartość w kolumnie daty była wcześniejsza niż 20.01.2022, dodaliśmy do daty pięć dni.
Należy zauważyć, że kolumna daty zachowała swój format daty, zamiast zostać przekonwertowana na format liczbowy.
Przykład 3: Użyj fifelse() w data.table
Poniższy kod ilustruje sposób użycia funkcji fifelse() w data.table do wykonania instrukcji if else w kolumnie daty w ramce danych i wygenerowania w rezultacie daty:
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
Jeśli wartość w kolumnie daty była wcześniejsza niż 20.01.2022, dodaliśmy do daty pięć dni.
Ponownie kolumna daty zachowała swój format daty zamiast zostać przekonwertowana na format liczbowy.
Uwaga : w przypadku wyjątkowo dużych ramek danych metody dplyr i data.table będą szybsze niż podstawowa metoda R.
Dodatkowe zasoby
Poniższe samouczki wyjaśniają, jak wykonywać inne typowe zadania w języku R:
Jak napisać zagnieżdżoną instrukcję If Else w R
Jak napisać opis sprawy w języku R
Jak dodać wiele kolumn do ramki danych w R