'Convert date of birth to age

I want to convert date of birth to age using the following code

df$age <- round(as.numeric(Sys.Date()-as.Date(df$DOB),format="%d/%m/%y")/365)

The format of DOB is f.e. 11-10-1969.

In the dataframe I see an age of 2012 (instead of 52).

I really dont know what I've done wrong. Can someone help me? Thank you in advance!

r


Solution 1:[1]

"11-10-1969" (month day year or day month year) is not an unambiguous date format. To get it properly converted you will need to specify the format argument to as.Date()

Note also that a 4-digit year needs a capital Y in the format string: "%d-%m-%Y" (or "%d/%m/%Y" for /). Sys.Date() is already a Date object, so you don't need the format argument with the /s in it.

> as.numeric(Sys.Date() - as.Date("11-10-1969", format="%d-%m-%Y")) / 365.25
#> [1] 52.56674

EDIT: use 365.25 to approximate leap years per Henry's suggestion in comment

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1