2

日時情報に基づいて一致させたい 2 つのデータセットがあります。データセット 1 の日時値は、指定されたタイムスタンプで終了する 10 分の時間ブロックを表します。データセット 2 の各行を、データセット 1 からの 10 分の時間ブロック (および関連データ) と一致させたいと思います。データの例を以下に示します。

Dataset 1
datetime            count
10/11/2012 16:25    231
10/11/2012 16:35    55
10/11/2012 16:45    0
10/11/2012 16:55    30
10/11/2012 17:05    22
10/11/2012 17:15    431
10/11/2012 17:25    455
10/11/2012 17:35    560
10/11/2012 17:45    7
10/11/2012 17:55    36
10/11/2012 18:05    12
10/11/2012 18:15    144
10/11/2012 18:25    583

Dataset 2
datetime            a       n   dpm
10/11/2012 16:26    2.03    27  3473
10/11/2012 17:24    1.35    28  3636
10/11/2012 18:21    7.63    29  3516

私は次のようなもので終わりたいと思います:

datetime2           a       n   dpm     datetime1           count
10/11/2012 16:26    2.03    27  3473    10/11/2012 16:35    55
10/11/2012 17:24    1.35    28  3636    10/11/2012 17:25    455
10/11/2012 18:21    7.63    29  3516    10/11/2012 18:25    583

データセットをマージするために使用できる cbind()、rbind()、merge() などの関数があることを認識しています (過去に尋ねた関連する質問に基づいて: How to merge two data frames in r by a日付/時刻の値が一致しない一般的な列)、しかし、この場合に役立つコードを書くことができませんでした。cbind(round(data, "mins")) と cbind(trun(data, "hours")) のさまざまな組み合わせを試しましたが、これらの関数は、データセット 1 からデータセット 2 の各行までの複数の時間ブロックに一致するように見えますが、各行が含まれるブロックだけではありません。この問題を解決する条件付きルールを何時間も見つけようとしましたが、運がありません。どんな助けでも大歓迎です。

4

2 に答える 2

2

1 つのオプションは data.table、最後の観測が繰り越される (locf) としても知られる一般的な結合を使用することです。

library(data.table)
DT  <- data.table(dataset1,key='datetime')
DT1 <- data.table(dataset2,key='datetime')
DT[DT1,roll='nearest']
             datetime count    a  n  dpm
1: 2012-11-10 16:26:00   231 2.03 27 3473
2: 2012-11-10 17:24:00   455 1.35 28 3636
3: 2012-11-10 18:21:00   583 7.63 29 3516

編集

ここでは、データを読み取る方法について説明します。通常、zooパッケージを使用するread.zooか、上記のように新しい列名を追加するのが1つのトリックです。

dat1 <- read.table(text='date time            a       n   dpm
10/11/2012 16:26    2.03    27  3473
10/11/2012 17:24    1.35    28  3636
10/11/2012 18:21    7.63    29  3516',header=TRUE)

dat1$datetime <- as.POSIXct(paste0(dat1$date,dat1$time),
                          format='%d/%m/%Y %H:%M')
     a  n  dpm            datetime
1 2.03 27 3473 2012-11-10 16:26:00
2 1.35 28 3636 2012-11-10 17:24:00
3 7.63 29 3516 2012-11-10 18:21:00
于 2013-06-26T14:42:16.463 に答える