我已经阅读了lubridate软件包手册,并向我的Stack Overflow查询了我的问题的各种排列,但是对我的特定问题没有答案。
我要做的是将事件发生时的月份数(以出生日期与某个特定事件日期之间的差值计算)。
这样,我使用sas7bdat
包导入了SAS数据集,并使用以下代码将SAS日期变量(DOB和Event)转换为R对象:
df$DOB <- as.Date(df$DOB, origin="1960-01-01")
df$DOB1 <- ymd(df$DOB)
对于Event变量也是如此:
df$Event <- as.Date(df$Event, origin="1960-01-01")
df$Event1 <- ymd(df$Event)
但是,DOB有一些NA值。因此,对于以下我想用来计算年龄(以月为单位)的代码。
df$interval <- new_interval(df$DOB1,df$Event1)
df$Age1 <- df$interval %/% months(1)
我收到错误:
est [start + est *每个<结束]中的错误<-est [start + est *每个<结束] +:下标分配中不允许使用NA
我究竟做错了什么?我尝试过if / else函数,但可能使用不正确。
(注意:对于那里的SAS程序员,我试图产生与以下函数相同的结果:
IF DOB ne . THEN Tage=Floor(intck('month',DOB,Event)-(Day(Event)<Day(DOB)));
最佳答案
使用lubridate软件包的简单示例
library(lubridate)
date1='20160101'
date2='20160501'
x=interval(ymd(date1),ymd(date2))
x= x %/% months(1)
print(x)
# answer : 4
或以下相同:
x=as.period(x) %>% month()
print(x)
# answer : 4
关于r - 如何使用lubridate软件包计算两个日期向量之间的月份数(其中一个向量具有NA值)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25369817/