问题描述
我正在尝试从两个日期列中计算年龄。首先,我将无效的出生日期(dob)转换为NA。接下来,我尝试使用lubridate计算年龄(来自https://stackoverflow.com/a/41730322/8772229的解决方案),但收到错误消息。有什么问题的建议吗?
数据:
df <- data.frame(dob=as.Date(c("2020-09-26","2017-12-01",NA)),today=as.Date(c("2020-09-25","2020-09-25","2020-09-25")))
df
dob today
1 2020-09-26 2020-09-25
2 2017-12-01 2020-09-25
3 <NA> 2020-09-25
代码:
library(lubridate)
df %>%
mutate(
# convert non-plausible dates to NA
dob= case_when((dob>today)~as.Date(NA_character_),TRUE~as.Date(dob)),# calculate age
age=year(as.period(interval(start = dob,end = today))))
消息:
Error in FUN(X[[i]],...) : subscript out of bounds
解决方法
由于尝试从year
期间提取NA
值,因此给了我一个错误。您可以使用time_length
中的lubridate
函数来获得年份差异。
library(dplyr)
library(lubridate)
df %>%
mutate(dob= replace(dob,dob > today,NA),age= time_length(today-dob,'years'))
# dob today age
#1 <NA> 2020-09-25 NA
#2 2017-12-01 2020-09-25 2.817248
#3 <NA> 2020-09-25 NA
,
要获取两个日期之间的差值,请使用
as.vector(今天-dob)
然后您可以除以365.25以得出年数。
如果您使用
今天-国防部 您将答案作为要素。
在您的数据上尝试以下代码:
年龄