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

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *