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

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *