2014-05-06 25 views
0

我有一些事件由id, var1, var2 and date標識。事件dififtime修復上次日期發生

爲dif_time所需的輸出是如下:

id var1 var2  date1  date2 dif_time 
    1 120 1 2014-06-03 2014-06-30  26 
    1 120 1 2014-06-04 2014-06-30  26 
    1 120 4 2014-06-05 2014-06-30  25 
    2 220 1 2014-06-05 2014-06-30  23 
    2 220 1 2014-06-07 2014-06-30  23 
    3 120 2 2014-06-10 2014-06-30  15 
    3 120 2 2014-06-12 2014-06-30  15 
    3 120 1 2014-06-15 2014-06-30  15 
    5 220 3 2014-06-20 2014-06-30  10 

我需要計算在日期1之間天dif_time(事件日期)和控制日期DATE2。 的約束是:

對於event (id,var1,var2)我需要找到last.date1和計算:

dif_time(days) = date2 - last.date1,對於每一個事件並報告該事件的結果。

我沒有找到一種方法來修復last.date1,所以你的幫助表示讚賞。

+0

Binaya,非常感謝您的 – user3591356

回答

1

你能做到這一點

dd<-data.frame(
    id = c(1L, 1L, 1L, 2L, 2L, 3L, 3L, 3L, 5L), 
    var1 = c(120L, 120L, 120L, 220L, 220L, 120L, 120L, 120L, 220L), 
    var2 = c(1L, 1L, 4L, 1L, 1L, 2L, 2L, 1L, 3L), 
    date1 = structure(c(16224, 16225, 16226, 16226, 16228, 16231, 16233, 16236, 16241), class = "Date"), 
    date2 = structure(c(16251, 16251, 16251, 16251, 16251, 16251, 16251, 16251, 16251), class = "Date") 
) 

last.date1<-with(dd, ave(date1, id, var1, var2, FUN=max, drop=T)) 
dd$date2-last.date1 

dd$diff_time <- dd$date2-last.date1 
+0

版有趣的,你路過'下降= TRUE'到'ave',它傳遞給'split'內部?不知道如何實際發生。 – thelatemail

+1

@thelatemail實際上,drop = T會傳遞給'interaction()'。沒有它,你會得到不存在的組合的警告。 – MrFlick

+0

啊哈 - 我看到,因爲'ave'調用是'ave(x,...,FUN =)',並且函數內部有'interaction(...)',所以'drop = TRUE'會被拾取'......'傳了下來。尼斯。 – thelatemail