5
これは私のデータフレームの外観です。一番右の列( "TimeForLevelChange")が私の希望する列です。あるレベルのレベルが変更されたとき、私は以前のレベルから最小の日付を取って、レベルの変化が起こる行から日付を取ってその差を計算します。だから、3行目、ジョンのレベルが1から2に変更し、彼は(2016年1月17日 - 2016年1月1日)16日間を過ごしたレベルに2レベルが変化したときに所与のレベルで費やされた時間を計算する
library(data.table)
dt <- fread('
Name Level Date RecentLevelChange TimeForLevelChange
John 1 2016-01-01 NA NA
John 1 2016-01-10 NA NA
John 2 2016-01-17 1->2 16
John 2 2016-01-18 NA NA
John 3 2016-01-22 2->3 5
John 4 2016-01-26 3->4 4
John 4 2016-01-27 NA NA
John 7 2016-01-29 4->7 3
Tom 1 2016-01-10 NA NA
Tom 2 2016-01-17 1->2 7
Tom 2 2016-01-18 NA NA
Tom 3 2016-01-22 2->3 5
Tom 4 2016-01-26 3->4 4
Tom 4 2016-01-27 NA NA
Tom 7 2016-01-29 4->7 3
')
dt[, Date := as.IDate(Date)]
を変更する前に、レベル1で私がシフトを使用することができますdata.tableの関数ですが、指定された名前の以前のレベルから最小の日付を定義する方法はわかりません。