使用 tidyverse 从日期计算年龄时出错:FUN(X[[i]], ...) 错误:下标越界
Error while calculating age from dates with tidyverse: Error in FUN(X[[i]], ...) : subscript out of bounds
我正在尝试根据两个日期列计算年龄。首先,我将任何无效的出生日期 (dob) 转换为 NA。接下来,我尝试使用 lubridate(解决方案来自:)计算年龄,但收到一条错误消息。对出了什么问题有什么建议吗?
数据:
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
它给了我一个不同的错误,因为我试图从 NA
句点中提取 year
值。您可以使用 lubridate
中的 time_length
函数来计算年份差异。
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(今天 - 出生日期)
然后您可以除以 365.25 得到年数。
如果你使用
今天 - dod
你得到的答案是一个因素。
在您的数据上尝试此代码:
年龄 <- as.vector(df$today - df$dob) #number of days
Age/365.25
我正在尝试根据两个日期列计算年龄。首先,我将任何无效的出生日期 (dob) 转换为 NA。接下来,我尝试使用 lubridate(解决方案来自:
数据:
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
它给了我一个不同的错误,因为我试图从 NA
句点中提取 year
值。您可以使用 lubridate
中的 time_length
函数来计算年份差异。
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(今天 - 出生日期)
然后您可以除以 365.25 得到年数。
如果你使用
今天 - dod 你得到的答案是一个因素。
在您的数据上尝试此代码:
年龄 <- as.vector(df$today - df$dob) #number of days Age/365.25