Çözmeyi denediğim sorun, içinde sıralanmış bir POSIXct değişkenine sahip bir veri çerçevem var. Her satır kategorize edilir ve her seviye için her bir satır arasındaki zaman farklarını almak ve bu verileri tekrar yeni bir değişkene eklemek istiyorum. Tekrarlanabilir problem aşağıdaki gibidir. Aşağıdaki işlev, bu sorunun amacı için sadece rastgele zamanlarla örnek veri oluşturmak içindir.Bir satır ile bir satır arasındaki bir önceki satır arasındaki zaman farkının nasıl hesaplanacağı düzeyler
random.time <- function(N, start, end) {
st <- as.POSIXct(start)
en <- as.POSIXct(end)
dt <- as.numeric(difftime(en, st, unit="sec"))
ev <- sort(runif(N, 0, dt))
rt <- st + ev
return(rt)
}
sorun simüle etmek için kod, aşağıdaki gibidir:
set.seed(123)
category <- sample(LETTERS[1:5], 20, replace=TRUE)
randtime <- random.time(20, '2015/06/01 08:00:00', '2015/06/01 18:00:00')
df <- data.frame(category, randtime)
veri çerçevesini elde edilen aşağıdaki gibidir: beklenen:
>category randtime timediff (secs)
>A 2015-06-01 09:05:00 0
>A 2015-06-01 09:06:30 90
>A 2015-06-01 09:10:00 210
>B 2015-06-01 10:18:58 0
>B 2015-06-01 10:19:58 60
>C 2015-06-01 08:14:00 0
>C 2015-06-01 08:16:30 150
çıkışı her alt grup ilk satırı vardır Önceki satır olmadığı için 0 zaman değeriyle. Kategorilere göre gruplama yapabildim ve farklılıkları hesaplamak için aşağıdaki işlevi çağırdım ancak tüm kategori grupları için son çıktıyı harmanlayamadım.
getTimeDiff <- function(x) {
no_rows <- nrow(x)
if(no_rows > 1) {
for(i in 2:no_rows) {
t <- x[i, "randtime"] - x[i-1, "randtime"]
}
}
}
Şanssız iki gün boyunca burada bulundum, bu yüzden herhangi bir yardımı çok takdir ediyorum. Teşekkürler.
sayesinde. Bu, kısmen, çıktıyı gereken şekilde düzenlemek için çözer. Bununla birlikte, lag() bir önceki satırın zamanını gerçek fark değil, zaman değeri olarak döndürür. – Mntester
@Mntester düzeltildi. – JasonAizkalns