2017-07-19 62 views
0

我有一個data.table類似如下:數兩個日期之間的幾個月中data.table

ID start_date end_date 
1 2015.01.01 2016.02.01 
2 2015.06.01 2016.03.01 
3 2016.01.01 2017.01.01 

我想獲得如下:

ID start_date end_date Months_passed 
1 2015.01.01 2016.02.01 13 
2 2015.06.01 2016.03.01 9 
3 2016.01.01 2017.01.01 12 

我嘗試下面的代碼:

DT[, Months_passed:= length(seq(from = start_date, to = end_date, by='month')) - 1] 

,但我得到的錯誤,那

「在seq.Date錯誤(來自= Default_honap,爲= Gyogyulas_honap,通過= 」月「): '從' 必須是長度爲1的 」

+1

你嘗試'difftime'? – Sotos

+0

是的,但是difftime的最大單位是「周」:/ –

+0

因此除以4 ... – Sotos

回答

3

下面是使用data.table一種可能的方法。首先,把你的日期實際日期格式:

df[, 2:3 := lapply(.SD, as.IDate, format = "%Y.%m.%d"), .SDcols = 2:3] 

然後,拿到幾個月過去了:

df[, months_passed := lengths(Map(seq, start_date, end_date, by = "months")) -1] 

所以基本上你需要在開始和結束日期Mapseq

結果是:

df 
# ID start_date end_date months_passed 
#1: 1 2015-01-01 2016-02-01   13 
#2: 2 2015-06-01 2016-03-01    9 
#3: 3 2016-01-01 2017-01-01   12 
+0

非常感謝,工作得很好 –

相關問題