R-时间长度问题

R-时间长度问题,r,lubridate,R,Lubridate,我使用R包lubridate来计算两个日期之间的年差。代码在绝大多数情况下运行良好,但当两个日期的日期和月份相同时,代码似乎很难运行。例如: #Specifying date 1 date1 <- as.Date("1993/04/01") #Specifying date 2 date2 <- as.Date("2011/04/01") #Calculating years between date 1 and date 2 years <- trunc(time_len

我使用R包lubridate来计算两个日期之间的年差。代码在绝大多数情况下运行良好,但当两个日期的日期和月份相同时,代码似乎很难运行。例如:

#Specifying date 1
date1 <- as.Date("1993/04/01")

#Specifying date 2
date2 <- as.Date("2011/04/01")

#Calculating years between date 1 and date 2
years <- trunc(time_length(difftime(date2, date1), "years"))
手工计算,年差应为18

有人能建议我如何纠正这一点吗?或者,如果这是预期的行为,我如何能够覆盖它?非常感谢您的反馈


Alice

问题在于使用truncate。使用地板,这将覆盖此行为

#Specifying date 1
date1 <- as.Date("1993/04/01")

#Specifying date 2
date2 <- as.Date("2011/04/01")

#Calculating years between date 1 and date 2
years <- floor(time_length(difftime(date2, date1), "years"))
years

##As mentioned in the comments, round also works
years_round <- round(time_length(difftime(date2, date1), "years"),0)
years_round

###A third possible approach
years_interval interval(date1, date2) %/% years(1)
years_interval

尝试使用roundtime\u长度。。。而不是trunc。您看到的时差为~17.998,trunc将四舍五入为最接近的整数。感谢您的建议。然而,地板仍然导致17。正如你所建议的,我会使用四舍五入,但这会导致其他时间差向上四舍五入。在以后的分析中,我将此对象视为一个年龄变量,因此,例如13岁8个月仍然需要被视为13岁,而不是14岁。问题似乎在于,时间长度或difftime函数错误地将差值计算为17.9986年,而不是18年。你还有其他建议吗?你可以尝试一种新的方法。将编辑我的答案。然而,在我的机器上,地板工作良好。您使用的是哪个版本的R?我运行的是3.5.1版,所以可能这就是问题所在。但无论如何,第三种方法非常有效——谢谢!
#Specifying date 1
date1 <- as.Date("1993/04/01")

#Specifying date 2
date2 <- as.Date("2011/04/01")

#Calculating years between date 1 and date 2
years <- floor(time_length(difftime(date2, date1), "years"))
years

##As mentioned in the comments, round also works
years_round <- round(time_length(difftime(date2, date1), "years"),0)
years_round

###A third possible approach
years_interval interval(date1, date2) %/% years(1)
years_interval