рассчитать разницу в днях отстающих на год вперед - PullRequest
0 голосов
/ 23 октября 2019

У меня есть таблица с идентификаторами, датами остановки и начала. Мне нужно изменить новый столбец с именем «running_time_in_days», который находит разницу от даты начала одного года до состояния остановки следующих лет для каждого идентификатора (процесс переносится на 1 января, поэтому продолжительность - на новый год).

library(readr)
library(dplyr)
library(lubridate)

# read in some test data
test <- read_csv("id, measure, measure_date
        1, start, 1998-10-3 
        1, stop, 1999-5-1
        1, stop, 2000-4-15
        1, start, 1999-11-9
        2, stop, 2000-6-1
        2, stop, 1999-5-25
        2, start, 1999-12-1 
        2, start, 1998-11-12")
# format "measure_date" as a date
test$measure_date <- test$measure_date %>% as_date('%Y-%m-%d')

Вывод может выглядеть примерно так в широком формате:

    id      start       stop        duration
    1   1998-10-03  1999-05-01  stop - start (days)
    1   1999-05-01  2000-04-15  stop - start (days)
    2   1998-11-12  1999-05-25  stop - start (days)
    2   1999-12-01  2000-06-01  stop - start (days)

1 Ответ

0 голосов
/ 26 октября 2019

Посмотрите, работает ли это для вас:

test %>% 
  # create unique row identifier for wide form, since there are
  # multiple start / stop dates associated with each id
  group_by(id) %>% 
  arrange(measure_date) %>% 
  mutate(id2 = rep(seq(1, n()/2), each = 2)) %>% 
  ungroup() %>% 

  # convert to wide form & calculate difference between dates
  tidyr::spread(measure, measure_date) %>% 
  mutate(duration = difftime(stop, start, "days")) %>% 
  select(-id2)

# A tibble: 4 x 4
     id start      stop       duration
  <dbl> <date>     <date>     <drtn>  
1     1 1998-10-03 1999-05-01 210 days
2     1 1999-11-09 2000-04-15 158 days
3     2 1998-11-12 1999-05-25 194 days
4     2 1999-12-01 2000-06-01 183 days
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...