微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从带有tidyverse的日期计算年龄时出错:FUNX [[i]],...中的错误:下标超出范围

如何解决从带有tidyverse的日期计算年龄时出错:FUNX [[i]],...中的错误:下标超出范围

我正在尝试从两个日期列中计算年龄。首先,我将无效的出生日期(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以得出年数。

如果您使用

今天-国防部 您将答案作为要素。

在您的数据上尝试以下代码:

年龄

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。