So sieht mein Datenframe aus. Die rechte Spalte ("TimeForLevelChange") ist meine gewünschte Spalte. Wenn sich ein Level für einen bestimmten Namen ändert, möchte ich das Mindestdatum von der vorherigen Ebene nehmen und das Datum aus der Zeile nehmen, in der die Leveländerung stattfindet, und die Differenz berechnen. So auf der dritten Reihe, änderte John Niveau von 1 bis 2 und er verbrachte 16 Tage (2016.01.17 - 2016.01.01) in Stufe 1 vor dem Pegeländerungs 2.Berechnung der Zeit, die in einer bestimmten Ebene verbracht wird, wenn sich dieser Pegel ändert
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)]
I Verschiebung verwenden können Funktion in data.table, aber ich weiß nicht, wie man das Mindestdatum von der vorherigen Ebene für einen gegebenen Namen definiert.