2016-11-15 10 views
-2

Я новичок в R, и я пытаюсь рассчитать различия по дате от базовой линии для каждого предмета. Я знаю, как рассчитать дневные различия, используя difftime, но у меня возникают проблемы с этим в цикле для каждого предмета. Любая помощь будет принята с благодарностью.Вложенные для циклов для различий даты

В основном я хочу, чтобы перейти от:

ID ДАТА
1 1.1.2015
1 1.1.2016
2 1.1.2017
3 1.1.2017
3 1.1.2016
3 1.1.2017

к:

ID ДАТА DATEDIFF
1 1.1.2015 0
1 1.1.2016 365
2 1.1.2017 0
3 1.1.2015 0
3 1.1.2016 365
3 1.1.2017 730

ответ

0

Использование lubridate для разбора даты и dplyr вычислить новый столбец:

library(lubridate) 
df <- data.frame(
    id = c(1,1,2,3,3,3), 
    date = c('1.1.2015','1.1.2016','1.1.2017','1.1.2015','1.1.2016','1.1.2017')) 
# parse dates as DayMonthYear 
df$date <- dmy(df$date) 
# calculate the difference to the oldest date in each group 
# mutate is called once for each group, so you could use an 
# arbitrary expression to calculate your new column only with 
# the data for this group 
df %>% group_by(id) %>% mutate(datediff = date-min(date)) 

Результат:

  id  date datediff 
      
1  1 2015-01-01 0 days 
2  1 2016-01-01 365 days 
3  2 2017-01-01 0 days 
4  3 2015-01-01 0 days 
5  3 2016-01-01 365 days 
6  3 2017-01-01 731 days