我在所有这些格式中都有点丢失并且无法使我的年龄功能正常工作,我不确定格式选项应用于源或目标的位置,我的目标是附加AGE列, dx $ BIRTH_DATE定义与我的源数据完全相同,这种格式的因素我无法改变它。我现在不想使用lubridate,因为我需要将它迁移到diff env。可能吗。 非常感谢你的帮助!! 马里奥
age_years <- function(from, to)
{
lt <- as.POSIXlt(c(from, to))
age <- lt$year[2] - lt$year[1]
mons <- lt$mon + lt$mday/50
if(mons[2] < mons[1]) age <- age -1
age
}
today <- Sys.Date() #,format="%m/%d/%Y")
class(today)
age_years("1988-06-30", "2003-07-12")
age_years("1988-06-30", date) ### doesn't work ???
as.character(dx$BIRTH_DATE)
as.Date(dx$BIRTH_DATE)
dx <- data.frame(ID = factor(c(1,2,3)), BIRTH_DATE = c("1/11/1953","2/12/1977","3/13/2000"), FEM = (c(11,22,33)))
dx
str(dx)
### <@>><
dx$AGE <- age_years(as.Date(dx$BIRTH_DATE), today) ## Age=1 ?????
答案 0 :(得分:1)
在这里使用您的代码是一个解决方案。您有两个主要问题,首先您的BirthDate格式未被声明(如皮埃尔所述)第二个您只调用第二年和第一年来声明年龄,而不是使用整个数据帧。现在从和将变成向量来定义年龄。希望这有帮助!
age_years <- function(from, to)
{
from <- as.POSIXlt(from)
to<- as.POSIXlt(to)
age <- to$year - from$year
mons <- from$mon + from$mday/50
if(mons[2] < mons[1]) age <- age -1
age
}
today <- Sys.Date() #,format="%m/%d/%Y")
dx <- data.frame(ID = factor(c(1,2,3)), BIRTH_DATE = c("1/11/1953","2/12/1977","3/13/2000"), FEM = (c(11,22,33)))
dx$AGE <- age_years(from=as.Date(dx$BIRTH_DATE,format = "%m/%d/%Y"), to=today)
> dx
ID BIRTH_DATE FEM AGE
1 1 1/11/1953 11 62
2 2 2/12/1977 22 38
3 3 3/13/2000 33 15