2017-06-28 11 views
1

これを行うには、よりクリーンな方法が必要であるように感じます。これは愚かな例ですが、私は(一定の間隔を持っている明白なナンセンスを省略)このようdata.frameを持っていると言う:列内の時間間隔を確認する

df = data.frame(date_time = seq(as.POSIXct("2017-05-29 08:15:00 UTC"), 
           as.POSIXct("2017-05-30 08:15:00 UTC"), by = "5 min"), 
       group = "temp") 

にだから私は実際には間隔があったか、またはそれことかわからなかったと言います一定ではありませんでした。私の質問は、列内の日付の間隔を見つける最良の方法は何ですか。私は、ループを使って何かが出ているが、そこに、より良い解決策がある場合、私は疑問に思って:

int_time = c() 
for(i in 1:nrow(df)){ 
    tmp = as.numeric(df$date_time[i+1] - df$date_time[i]) 
    int_time = c(tmp, int_time) 
} 
+1

を使用) '? – lmo

+0

Yikesは私をそれ以上に複雑にしました。それを答えにしたいですか?それから私はそれを受け入れることができます。 – boshek

答えて

3

diffは多くのデータ型を受け入れ、POSIXtクラスのベクトルのために特別の方法があります。この場合

head(diff(df$date_time)) 

戻り

Time differences in mins 
[1] 5 5 5 5 5 5 

あなたはペアごとの違いを取っているので、あなたは観察を失うことになります。これをデータセットに戻すには、2つの選択肢があります。 D_I = X_Iについて

- X_ {I-1}についてD_I = X_ {I + 1}

df$int_time <- c(NA, diff(df$date_time)) 

を使用 - X_I、多分 `差分(DF $ DATE_TIME

df$int_time <- c(diff(df$date_time), NA) 
+0

これをdata.frameに追加する最良の方法をお勧めしますか? '> df $ int_time < - diff(df $ date_time)'となります。このエラーは '$ < - .data.frame'のエラー(' * tmp * '、int_time、value = c(5,5,5,5,5::置換は288行、データは289') – boshek

関連する問題