lubridate,计算年数,返回NA

时间:2016-07-04 14:56:11

标签: r date lubridate

你好,我有一个问题,计算一些主体知道出生日期的年龄,我正在使用rubridate包,样本:

> head(df$hs_dob1c)
[1] 2002-01-30 2004-12-29 2005-09-15 2002-12-20 2005-07-28 1995-08-28

首先我设置:

df$hs_dob1c <- as.Date(df$hs_dob1c, format='%y-%m-%d')

然后:

today <- as.Date(Sys.Date(), format="%y-%m-%d")
ref_date <- as.Date(df$hs_dob1c, format="%y-%m-%d")

问题是当我设置引用时因为:

> head(df$hs_dob1c)
[1] NA NA NA NA NA NA

2 个答案:

答案 0 :(得分:0)

不确定您使用lubridate的位置,但请尝试

df$hs_dob1c <- as.Date(df$hs_dob1c, format='%Y-%m-%d')

而不是

df$hs_dob1c <- as.Date(df$hs_dob1c, format='%y-%m-%d')

%y表示2位数年份,您有4位数年份,应该称为%Y

答案 1 :(得分:0)

到目前为止,您还没有使用lubridate,但它也适用于基础 R

hs_dob1c <- as.Date(
  c("2002-01-30", "2004-12-29", "2005-09-15", "2002-12-20", "2005-07-28" ,"1995-08-28"),
  format='%Y-%m-%d')

today <- as.Date(Sys.Date(), format="%Y-%m-%d")

difftime(today, hs_dob1c, units = "days")
# Time differences in days
# [1] 5269 4205 3945 4945 3994 7616

您必须将format='%y-%m-%d'更改为format='%Y-%m-%d'

使用lubridate它会像这样工作:

library("lubridate")
hs_dob1c <- ymd(
  c("2002-01-30", "2004-12-29", "2005-09-15", "2002-12-20", "2005-07-28" ,"1995-08-28"))

today <- ymd(Sys.Date())

difftime(today, hs_dob1c,units = "days")
# Time differences in days
# [1] 5269 4205 3945 4945 3994 7616