2016-10-03 4 views
0

Предположим, что у меня есть dataframe, который выглядит следующим образом:Calculate человеко-лет вычитанием даты начала с даты окончания

id start_date death_date 
    1 2011-05-20 2014-12-11 
    2 2014-08-01 2016-01-05 
    3 2005-01-02 2015-10-20 
    4 2015-06-30 2016-02-14 
    5 2014-07-01 2014-09-03 

Я хочу, чтобы создать новый столбец, который содержит разницу между death_date и датой_начала в месяцах ПОКА start_date не до 2014-05-31. Если start_date < 2014-05-31, то я хочу, чтобы новый столбец был разницей между death_date и 2014-05-31 в месяцах.

Код для создания образца dataframe:

id <- c(1:5) 
start_date <- c(as.Date("2011-05-20"), as.Date("2014-08-01"), 
      as.Date("2005-01-02"), as.Date("2015-06-30"), 
      as.Date("2014-07-01")) 

death_date <- c(as.Date("2014-12-11"), as.Date("2016-01-05"), 
      as.Date("2015-10-20"), as.Date("2016-02-14"), 
      as.Date("2014-09-03")) 

example_dates <- data.frame(id, start_date, death_date) 
+0

пример $ разница '<- пример $ death_date - пример $ start_date'? – Jaap

+0

@ProcrastinatusMaximus, но с условием, что если start_date до 2014-05-31, выполните example_dates $ death_date - «2014-05-31». Это мой вопрос –

+0

замените 'example $ start_date' в приведенном выше комментарии с помощью' ifelse (пример $ start_date Jaap

ответ

0

Попробуйте это:

df$new_col <- round(ifelse(df$start_date<as.Date("2014-05-31"), 
       df$death_date-as.Date("2014-05-31"), df$death_date-df$start_date)/30, 2) 

    # id start_date death_date new_col 
# 1 1 2011-05-20 2014-12-11 6.47 
# 2 2 2014-08-01 2016-01-05 17.40 
# 3 3 2005-01-02 2015-10-20 16.90 
# 4 4 2015-06-30 2016-02-14 7.63 
# 5 5 2014-07-01 2014-09-03 2.13 
Смежные вопросы