A: запретить ifelse() преобразовывать дату в числовое значение.


Функция ifelse() в базе R по умолчанию преобразует объекты даты в числовые объекты.

Чтобы этого не произошло, в качестве альтернативы можно использовать один из следующих методов:

Способ 1: используйте as.character() в Base R

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

Способ 2: используйте if_else() в dplyr

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

Способ 3: используйте fifelse() в data.table

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

В следующих примерах показано, как использовать каждый метод на практике со следующим фреймом данных в 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

Пример 1. Использование as.character() в Base R

В следующем коде показано, как использовать функцию as.character() с базовой функцией ifelse() R для выполнения оператора if else в столбце даты фрейма данных и получения в результате даты:

 #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

Если значение в столбце даты было до 20.01.2022, мы добавляли к дате пять дней.

Обратите внимание, что столбец даты сохранил свой формат даты, а не был преобразован в числовой формат.

Пример 2. Использование if_else() в dplyr

Следующий код показывает, как использовать функцию if_else() dplyr для выполнения оператора if else в столбце даты во фрейме данных и получения в результате даты:

 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

Если значение в столбце даты было до 20.01.2022, мы добавляли к дате пять дней.

Обратите внимание, что столбец даты сохранил свой формат даты, а не был преобразован в числовой формат.

Пример 3. Использование fifelse() в data.table

Следующий код показывает, как использовать функцию fifelse() объекта data.table для выполнения оператора if else в столбце даты во фрейме данных и получения в результате даты:

 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

Если значение в столбце даты было до 20.01.2022, мы добавляли к дате пять дней.

Опять же, столбец даты сохранил свой формат даты вместо преобразования в числовой формат.

Примечание . Для очень больших кадров данных методы dplyr и data.table будут работать быстрее, чем базовый метод R.

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные задачи в R:

Как написать вложенный оператор If Else в R
Как написать оператор Case в R
Как добавить несколько столбцов во фрейм данных в R

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *