2017-03-31 4 views
0

Rにはまったく新しく、この問題について私に助けていただきありがとうございます。不連続な15分の時系列データセットを含む連続15分の時系列データセットを結合する

私は、マージしたい2つの15分時系列データセットを持っています。私は、共通のx軸にこの結合されたデータセットの変数の組み合わせをプロットしたいと思います。ここでキャッチがありますが、データセットの1つに値/日付がありません。

Aには、posixltと14個の数値変数(水質に関する)の形式の日付/時刻列があります。読みは15分間隔です。しかし、時系列は不完全であり、機器のエラーのためにいくつかの読みが欠けている。 Bには、posixltおよび1の数値変数としてフォーマットされた15分間隔の日時カラムもあります。しかしながら、このシリーズは連続的であり、すなわち欠損データはない。ここ

を短く一例であるが、データは、約6ヶ月カバー、全体ランダムに繰り返すこの問題に(通知データA 2:45読み取りが欠落している):ここ

Temp Turb   DATETIME     Q   DATETIME  
1 21 5 2017-03-19 02:00:00    1 3 2017-03-19 02:00:00 
2 15 5 2017-03-19 02:15:00    2 3 2017-03-19 02:15:00 
3 18 5 2017-03-19 02:30:00    3 3 2017-03-19 02:30:00 
4 17 17 2017-03-19 03:00:00    4 5 2017-03-19 02:45:00 
5 18 5 2017-03-19 03:15:00    5 7 2017-03-19 03:00:00 
6 17 5 2017-03-19 03:30:00    6 6 2017-03-19 03:15:00 
7 17 6 2017-03-19 03:45:00    7 4 2017-03-19 03:30:00  
              8 3 2017-03-19 03:45:00 

を短縮するためのコードであります例。

A<- data.frame("DATE" =c("3/19/17","3/19/17","3/19/17","3/19/17", 
         "3/19/17","3/19/17","3/19/17"), "TIME"=c("02:00:00","02:15:00", 
         "02:30:00","03:00:00","03:15:00","03:30:00","03:45:00"), 
         "Temp" = c(21,15,18,17,18,17,17), "Turb" = c(5,5,5,17,5,5,6)) 
          A$DATETIME <-paste(A$DATE,A$TIME) 
         A$DATETIME <- strptime(A$DATETIME, "%m/%d/%y %H:%M:%S") 
         A<-subset(A, select = -c(DATE,TIME)) 
B <- data.frame("DATE" =c("3/19/17","3/19/17","3/19/17","3/19/17", 
         "3/19/17","3/19/17","3/19/17","3/19/17"), "TIME"=c("02:00:00","02:15:00", 
         "02:30:00","02:45:00","03:00:00","03:15:00","03:30:00","03:45:00"), 
         "Q" = c(3,3,3,5,7,6,4,3)) 
          B$DATETIME <-paste(B$DATE,B$TIME) 
          B$DATETIME <- strptime(B$DATETIME, "%m/%d/%y %H:%M:%S") 
         B<-subset(B, select = -c(DATE,TIME)) 

私はAとBからの数値変数は互換AとB.残念ながら15分の時間でプロットすることができるように、空白で欠落データを埋めるためにPADRを使用するように期待していたが、非標準時間ですpadrを使用する間隔。私は例のスタックオーバーフローを見て、私が見つけることができる最も近いのはhereでしたが、動作させることができませんでした。それは私のデータセットを1分のデータ間隔に縮めましたが、NAは私のすべての数値変数を15分のマークで置き換えました。エラーが含まれているDateTime変数などのステートメントはソートされていませんでした。

リンクされた例に関するその他の推奨事項や具体的なガイダンスはありますか?ありがとう!!!

答えて

0

full_joinはあなたに望ましい出力を与えますか?下記のコードではDATETIMEPOSIXctに変換する必要がありますが、必要に応じて後で変換することができます。ベースRで

library(dplyr) 

A$DATETIME = as.POSIXct(A$DATETIME) 
B$DATETIME = as.POSIXct(B$DATETIME) 

AB = full_join(A, B, by="DATETIME") # a dplyr function 
Temp Turb   DATETIME Q 
1 21 5 2017-03-19 02:00:00 3 
2 15 5 2017-03-19 02:15:00 3 
3 18 5 2017-03-19 02:30:00 3 
4 17 17 2017-03-19 03:00:00 7 
5 18 5 2017-03-19 03:15:00 6 
6 17 5 2017-03-19 03:30:00 4 
7 17 6 2017-03-19 03:45:00 3 
8 NA NA 2017-03-19 02:45:00 5 

、同等のは次のようになります。

AB = merge(A,B, by="DATETIME", all=TRUE) 
1

あなたはXTSでこれを解決するが、それはXTS心に留めておくことができます行列のようなものです:それはすることができます1つのタイプのデータのみを格納します。また、POSIXltオブジェクトに含まれている特定の要素にアクセスする必要がない限り、POSIXltの代わりにPOSIXctを使用する必要があります。

require(xts) 
a <- xts(A[,c("Temp","Turb")], as.POSIXct(A$DATETIME)) 
b <- xts(B["Q"], as.POSIXct(B$DATETIME)) 
(x <- merge(a, b)) 
#      Temp Turb Q 
# 2017-03-19 02:00:00 21 5 3 
# 2017-03-19 02:15:00 15 5 3 
# 2017-03-19 02:30:00 18 5 3 
# 2017-03-19 02:45:00 NA NA 5 
# 2017-03-19 03:00:00 17 17 7 
# 2017-03-19 03:15:00 18 5 6 
# 2017-03-19 03:30:00 17 5 4 
# 2017-03-19 03:45:00 17 6 3 

したい場合は、あなたが戻っdata.frameに結果を変換することができます:

d <- data.frame(DATETIME=index(x), x) 
# remove the rownames, if you want 
rownames(d) <- NULL 
print(d) 
#    DATETIME Temp Turb Q 
# 1 2017-03-19 02:00:00 21 5 3 
# 2 2017-03-19 02:15:00 15 5 3 
# 3 2017-03-19 02:30:00 18 5 3 
# 4 2017-03-19 02:45:00 NA NA 5 
# 5 2017-03-19 03:00:00 17 17 7 
# 6 2017-03-19 03:15:00 18 5 6 
# 7 2017-03-19 03:30:00 17 5 4 
# 8 2017-03-19 03:45:00 17 6 3 
関連する問題