2017-01-24 20 views
0

locationsensorに基づいて日付と時刻の時間間隔を計算しました。私のデータの一部は次のとおりです。時間間隔を計算するときの日付タイムスタンプを維持する

datehour <- c("2016-03-24 20","2016-03-24 06","2016-03-24 18","2016-03-24 07","2016-03-24 16", 
      "2016-03-24 09","2016-03-24 15","2016-03-24 09","2016-03-24 20","2016-03-24 05", 
      "2016-03-25 21","2016-03-25 07","2016-03-25 19","2016-03-25 09","2016-03-25 12", 
      "2016-03-25 07","2016-03-25 18","2016-03-25 08","2016-03-25 16","2016-03-25 09", 
      "2016-03-26 20","2016-03-26 06","2016-03-26 18","2016-03-26 07","2016-03-26 16", 
      "2016-03-26 09","2016-03-26 15","2016-03-26 09","2016-03-26 20","2016-03-26 05", 
      "2016-03-27 21","2016-03-27 07","2016-03-27 19","2016-03-27 09","2016-03-27 12", 
      "2016-03-27 07","2016-03-27 18","2016-03-27 08","2016-03-27 16","2016-03-27 09") 
location <- c(1,1,2,2,3,3,4,4,"out","out",1,1,2,2,3,3,4,4,"out","out", 
       1,1,2,2,3,3,4,4,"out","out",1,1,2,2,3,3,4,4,"out","out") 
sensor <- c(1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16, 
      1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16) 
Temp <- c(35,34,92,42,21,47,37,42,63,12,35,34,92,42,21,47,37,42,63,12, 
      35,34,92,42,21,47,37,42,63,12,35,34,92,42,21,47,37,42,63,12) 
df <- data.frame(datehour,location,sensor,Temp) 

私は時差を計算するために次のコードを使用しました。しかし、それは各エントリで正しい日付時間を維持しません。列datehour1およびdatehour2を参照してください。

df$datehour <- as.POSIXct(df$datehour, format = "%Y-%m-%d %H") 
final.time.df <- setDT(df)[order(datehour, location, sensor), .(difftime(datehour[-length(datehour)], 
                      datehour[-1], unit = "hour"), 
                      datehour1 = datehour[1], datehour2 = datehour[2]), .(location, sensor)] 

私は各時間差がそれを識別するためにそれを計算するために使用されるようにしたいと思います。私は、次のように結果を希望:

location sensor  V1   datehour1   datehour2 
    out  16 -28 hours 2016-03-24 05:00:00 2016-03-25 09:00:00 
    1  16 -25 hours 2016-03-24 06:00:00 2016-03-25 07:00:00 
    2  16 -26 hours 2016-03-24 07:00:00 2016-03-25 09:00:00 
    3  16 -22 hours 2016-03-24 09:00:00 2016-03-25 07:00:00 
    4  16 -23 hours 2016-03-24 09:00:00 2016-03-25 08:00:00 
    4  1 -27 hours 2016-03-24 15:00:00 2016-03-25 18:00:00 
    3  1 -20 hours 2016-03-24 16:00:00 2016-03-25 12:00:00 
    2  1 -25 hours 2016-03-24 18:00:00 2016-03-25 19:00:00 
    1  1 -25 hours 2016-03-24 20:00:00 2016-03-25 21:00:00 
    out  1 -20 hours 2016-03-24 20:00:00 2016-03-25 16:00:00 

答えて

1

がわかりましたので、私はdata.tablesソリューションのいずれかの手段によって、専門家ではない、その結果として、私はあなたがグループ化を使用しているか、非常にわからないんだけどあなたの質問への答えは、あなたがまだ別の方法でこれを解決していないならば、difftime(datehour[-length(datehour)], datehour[-1], unit = "hour")のコードの塊にあると思いますが、事実ではありません。違いを間違って計算していますが、それによってグループ化ステートメントが予想されるグループ数に解決されなくなっています。

私は時間差計算からグループを分離しようとした、そしてあなたの予想出力(明らかにいくつかのフォーマットが必要)を取得することができた:私はポイントを逃した場合

final.time.df <- setDT(df)[order(datehour, location, sensor), .(datehour1 = datehour[1], datehour2 = datehour[2]), .(location, sensor)] 
final.time.df$diff = final.time.df$datehour1 - final.time.df$datehour2 

、聞かせて自由に感じます私は知っていると私は答えを削除します!私はそれが特に洞察力のある答えではないことを知っていますが、これがそうするかもしれないように見えます、そして、私は今、自分自身に問題を抱えており、助けようとしていました。

+0

この問題に戻るには少し時間がかかりました。あなたの解決策は、私が問題について異なった考えをするのに役立ち、より良いやり方を見つけることに役立ちました。ありがとう。 – phaser

関連する問題