2016-04-16 2 views
0

При использовании difftime() я создаю результаты, которые являются (1) неправильным знаком и (2) неправильными значениями. Ниже приведен рабочий пример моего кода, который реплицирует проблему. Как видно, 1953 год - до 1986 года. Разве он не должен производить положительно подписанный вывод?R: Противоположный порядок времени начала/остановки для входа difftime()?

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 

ответ

3

В коде содержатся две ошибки. Во-первых, порядок x и yshould be inversed в difftime(). Вторая неточность - это множитель. Год имеет, 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 

В течение четырех значащих цифр результат будет таким же, как и раньше.

Смежные вопросы