Вычтите месяц / год, чтобы получить годы - PullRequest
2 голосов
/ 01 июня 2019
data = data.frame("start"= c("1/2000","8/2004","99/9999"),
                  "stop"=c("1/2001","2/2007","09/2010"),
                  "WANTYEARS"= c(1,2.5,NA))

У меня есть дата в формате месяц / год, и я хочу вычесть, чтобы получить годы.

Моя попытка простых данных $ stop - data $ start не дала желаемых результатов. СПАСИБО.

Ответы [ 3 ]

2 голосов
/ 01 июня 2019

Класс yearmon представляет месяцы и годы как годы и доли года.
Использование data показано в примечании в конце:

library(zoo)

transform(data, diff = as.yearmon(stop, "%m/%Y") - as.yearmon(start, "%m/%Y"))

дает:

    start    stop diff
1  1/2000  1/2001  1.0
2  8/2004  2/2007  2.5
3 99/9999 09/2010   NA

Примечание

data = data.frame(start= c("1/2000", "8/2004", "99/9999"),
                  stop = c("1/2001", "2/2007", "09/2010"))
1 голос
/ 01 июня 2019

Одна возможность с участием dplyr и lubridate может быть:

data %>%
 mutate_at(vars(1:2), list(~ parse_date_time(., "my"))) %>%
 mutate(WANTYEARS =  round(time_length(stop - start, "years"), 1))

       start       stop WANTYEARS
1 2000-01-01 2001-01-01       1.0
2 2004-08-01 2007-02-01       2.5
3       <NA> 2010-09-01        NA
1 голос
/ 01 июня 2019

Один из вариантов - использовать difftime из базы R. Добавьте «01» к stop и start date для создания фактического объекта Date и вычтите эти даты, используя difftime с единицей измерения "weeks" и разделивэто по количеству недель в году, чтобы получить разницу во времени в году,

round(difftime(as.Date(paste0("01/", data$stop), "%d/%m/%Y"), 
      as.Date(paste0("01/", data$start), "%d/%m/%Y"), units = "weeks")/52.2857, 2)

#[1] 1.0 2.5  NA

Мы можем сделать то же самое, используя любой другой компонент единицы difftime, если мы знаем эквивалентный коэффициент преобразования года, как, например,с "days"

round(difftime(as.Date(paste0("01/", data$stop), "%d/%m/%Y"), 
      as.Date(paste0("01/", data$start), "%d/%m/%Y"), units = "days")/365.25, 2)
#[1] 1.0 2.5  NA
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...