SecretIndividual
SecretIndividual

Reputation: 2519

as.Date returning number when overriding old date

I got this piece of code:

tel = data.frame(s = c(1,2,3))
tel <- tel %>% mutate(datum = as.Date("19001212", "%Y%m%d"))
tel <- tel %>% mutate(datum = ifelse(s == 1, as.Date("20191211", "%Y%m%d"), datum))

When this code runs it adds a column datum containing the date to a data frame on line 2. Then on line 3 it tries to change this date for rows in which s has the value 1. However for some reason it does not insert the new date in the but the number 18241 and changes all other datum fields (for the other rows into -25222.

What causes this and how do I fix it so it overrides the data set correctly?

Upvotes: 2

Views: 67

Answers (3)

maarvd
maarvd

Reputation: 1284

dplyr package has if_else, which seems to work

tel %>% mutate(datum = if_else(s == 1, as.Date("20191211", "%Y%m%d"), datum))

Upvotes: 4

Karthik S
Karthik S

Reputation: 11584

Will trying like this work?

> tel %>% mutate(datum = as.Date(ifelse(s == 1, "20191211", "19001212"), "%Y%m%d"))
  s      datum
1 1 2019-12-11
2 2 1900-12-12
3 3 1900-12-12
> 

Upvotes: 1

jay.sf
jay.sf

Reputation: 72758

It's the ifelse that internally coerces dates into numerics. I suggest to simply subset your data to replace the values. I show a replacement of your line 3 here:

tel[tel$s == 1, "datum"] <- as.Date("20191211", "%Y%m%d")
tel
#   s      datum
# 1 1 2019-12-11
# 2 2 1900-12-12
# 3 3 1900-12-12

Upvotes: 3

Related Questions