R:日期/因素中缺少行动

时间:2015-09-24 15:44:05

标签: r

我在所有这些格式中都有点丢失并且无法使我的年龄功能正常工作,我不确定格式选项应用于源或目标的位置,我的目标是附加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 ?????

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