当使用difftime()时,我产生的结果是(1)错误的符号和(2)不正确的值。下面是我的代码复制问题的工作示例。可以看出,1953年是在1986年之前。是不是应该产生积极签名的产出?
x <- c("1953/05/24", "1930/04/16", "1986/04/01")
x <- as.Date(x, format="%Y/%m/%d")
str(x)
Date[1:3], format: "1953-05-24", "1930-04-16", "1986-04-01"
y <- "1986/04/26"
y <- as.Date(y, format="%Y/%m/%d")
str(y)
Date[1:1], format: "1986-04-26"
z <- difftime(x, y, units = "weeks") %>% as.numeric(.) %>% "*"(1/52.25)
z[1]
[1] -32.87765
答案 0 :(得分:3)
您的代码中有两个错误。首先,x
中y
和difftime()
should be inversed的顺序。第二个不准确的是乘数。一年,on average, 52.1775 weeks。
这应该有效:
z <- difftime(y, x, units = "weeks") / 52.1775
#> z
#Time differences in weeks ## Programmer's note: those are actually years.
#[1] 32.92333176 56.02852899 0.06844768
如果计算单位使用天数而不是数周,则计算变得更容易,因为这允许使用每年365.25天的众所周知的近似值:
z <- difftime(y, x, units = "days") / 365.25
#> z
#Time differences in days ## Programmer's note: Those, too, are years:
#[1] 32.92265572 56.02737851 0.06844627
在四位有效数字内,结果与之前相同。