2016-04-19 12 views
0

だから、私は絶対にループで吸う(あなたがそれをもっと練習するための推奨文書があれば教えてください)。しかし、現時点では、各インスタンスとインスタンスのタイムスタンプの時間差(数十万インスタンス)を計算したいと考えています。説明するには(データセット 'テスト'):ループはタイムスタンプ間の時間を計算する

car name  timestamp 
1   2015-05-03 21:15:00 
1   2015-05-03 21:45:00 
1   2015-05-03 22:30:00 
2   2015-05-04 05:45:00 
2   2015-05-04 16:45:00 

タイムスタンプはPOSIXct形式です。私が達成したいのは、同じ車である限り、前のインスタンスとの時間差をすべての車に分単位で計算することです。だから、私は次のような結果を取得したいのです:私は2つのインスタンス間の時間を計算するために管理

[1] N/A 
[2] 30 
[3] 45 
[4] N/A 
[5] 660 

difftime(test$timestamp[3],test$timestamp[(3-1)],units="mins") 

私は次のようにループに置く開始しました:

しかし、これは私にエラーを与えてくれるだけでなく、新しい車の最初の行(例:行[1]と[4])の時間差を計算しないように伝えなければなりません。

私を助けてくれてありがとうございました!

+1

これはループを避けるための素晴らしいケースのようです。あなたが本当に1つを必要とする理由はありますか? – BenBarnes

+0

Nop!ちょうどそれが最善の方法だと思った..しかし、本当に1つを使用しないことを幸せに! – zoekdestep

答えて

2

おそらくdouble forループが問題ありません。

output <- c() 
for(car in unique(test$carName)){ 
    tmp <- test[test$carName==car,] 
    out <- c(NA) 
    for(j in 2:nrow(tmp)){ 
    out[j] <- difftime(tmp$timestamp[j],tmp$timestamp[j-1],units="mins") 
    } 
    output <- c(output, out) 
} 
+0

返信いただきありがとうございます!しかし、これは、1つだけではなく、多くの異なる車名が存在するという事実を克服するものではありません(上記のデータの抽出には、約700種類の車名があります)。 – zoekdestep

+0

このコードは特に書かれています。 "for(car in unique(test $ carName))"という行の目的は、各車のデータのサブセットを選択することです。どんなに違う車名の番号 –

+0

申し訳ありませんが、私の間違いは、十分にそれを読んでいない!ありがとう、この1つは働いている!! – zoekdestep