1

データ フレームとして保存している約 120,000 行の時系列データセットがあります。15分間隔のデータがほとんどですが、月単位のデータもあります。15 分のデータのみを保持し、1 か月間隔でデータを削除したい。したがって、連続するタイムスタンプの差を計算してから、15 分 (900 秒) に等しくないものをすべて除外しています。私のタイムスタンプ列名は「datetime」です。以下を使用して時間間隔を計算しています-

site_data[1:nrow(site_data)-1,"Interval"] <- as.numeric(difftime(site_data[2:nrow(site_data),"DateTime"],
                                                                 site_data[1:nrow(site_data)-1,"DateTime"]))

しかし、このコードの実行には時間がかかりすぎます。difftime のより高速な代替手段はありますか? タイムスタンプ列は POSIXct 型の日時です。ありがとうございました。

4

1 に答える 1

3

使用するだけdiff(as.numeric(timeCol))です:

R> library(microbenchmark)
R> times <- Sys.time() + 1:1e5
R> microbenchmark(diff(times), diff(as.numeric(times)))
Unit: microseconds
                    expr      min      lq    mean  median      uq     max neval cld
             diff(times) 1653.999 2153.82 8871.00 2407.66 5313.88 41223.4   100   b
 diff(as.numeric(times))  774.058 1215.35 3910.26 1456.82 1846.53 35622.2   100  a 
R> 

大きな差はありませんが、平均すると約2倍です。

于 2016-11-07T22:03:54.063 に答える