A: evite que ifelse() converta data em numérico
A função ifelse() na base R converte objetos de data em objetos numéricos por padrão.
Para evitar que isso aconteça, você pode usar um dos seguintes métodos como alternativa:
Método 1: Use as.character() na Base R
df$date <- as. Date (ifelse(df$date < ' 2022-01-20 ', as. character (df$date+5), as. character (df$date)))
Método 2: use if_else() em dplyr
df$date <- if_else(df$date < ' 2022-01-20 ', df$date+5, df$date)
Método 3: use fifelse() em data.table
df$date <- fifelse(df$date < ' 2022-01-20 ', df$date+5, df$date)
Os exemplos a seguir mostram como usar cada método na prática com o seguinte quadro de dados em 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
Exemplo 1: Use as.character() na Base R
O código a seguir mostra como usar a função as.character() com a função R base ifelse() para executar uma instrução if else na coluna de data do quadro de dados e produzir uma data como resultado:
#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
Se um valor na coluna de data for anterior a 20/01/2022, adicionamos cinco dias à data.
Observe que a coluna de data manteve seu formato de data em vez de ser convertida para um formato numérico.
Exemplo 2: Use if_else() em dplyr
O código a seguir mostra como usar a função if_else() do dplyr para executar uma instrução if else na coluna de data do quadro de dados e produzir uma data como resultado:
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
Se um valor na coluna de data for anterior a 20/01/2022, adicionamos cinco dias à data.
Observe que a coluna de data manteve seu formato de data em vez de ser convertida para um formato numérico.
Exemplo 3: Use fifelse() em data.table
O código a seguir mostra como usar a função fifelse() de data.table para executar uma instrução if else na coluna de data no quadro de dados e produzir uma data como resultado:
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
Se um valor na coluna de data for anterior a 20/01/2022, adicionamos cinco dias à data.
Novamente, a coluna de data manteve seu formato de data em vez de ser convertida para um formato numérico.
Nota : Para quadros de dados extremamente grandes, os métodos dplyr e data.table serão mais rápidos que o método R base.
Recursos adicionais
Os tutoriais a seguir explicam como realizar outras tarefas comuns em R:
Como escrever uma instrução If Else aninhada em R
Como escrever uma declaração de caso em R
Como adicionar várias colunas ao quadro de dados em R