3

次のデータフレームがあります

t <- strptime(c("2012-01-01 00:00:00","2012-01-01 01:00:00", "2012-01-01 02:00:00", "2012-01-01 05:00:00", "2012-01-01 06:00:00"), format ="%Y-%m-%d %H:%M:%S");t
d1 <- 2:6
d2 <- 15:11
dfr <- data.frame(t, d1, d2);dfr

                   t d1 d2
 2012-01-01 00:00:00  2 15
 2012-01-01 01:00:00  3 14
 2012-01-01 02:00:00  4 13
 2012-01-01 05:00:00  5 12
 2012-01-01 06:00:00  6 11

「2012-01-01 03:00:00」と「2012-01-01 04:00:00」のデータが欠落していることがわかります。

欠落しているデータを見つけるために、最初に正しい時間ステップを生成し、それを以下のように「t」列と比較しました。

    t1Gen <- strptime("2012-01-01 00:00:00",format="%Y-%m-%d %H:%M:%S");
    t2Gen <- strptime("2012-01-01 06:00:00",format="%Y-%m-%d %H:%M:%S");

    tGen <- seq(t1Gen,t2Gen, 3600);tGen

"2012-01-01 00:00:00 CET" 
"2012-01-01 01:00:00 CET" 
"2012-01-01 02:00:00 CET" 
"2012-01-01 03:00:00 CET" 
"2012-01-01 04:00:00 CET" 
"2012-01-01 05:00:00 CET" 
"2012-01-01 06:00:00 CET"

mdfr <- match(tGen,dfr$t);mdfr
[1]  1  2  3 NA NA  4  5
subfr <- subset(mdfr, is.na(mdfr));subfr
[1] NA NA

一致機能を使用すると、2 つの要素が "NA" で欠落として抽出されます。ここでの目的は、欠落している 2 つの行を「-99」で埋めて、データが欠落していることを示し、結果のデータフレームを次のようにすることです。

                   t d1 d2
 2012-01-01 00:00:00  2 15
 2012-01-01 01:00:00  3 14
 2012-01-01 02:00:00  3 14
 2012-01-01 03:00:00 -99-99
 2012-01-01 04:00:00 -99-99
 2012-01-01 05:00:00  5 12
 2012-01-01 06:00:00  6 11

私はこの時点まで立ち往生しています。これに関する助けをいただければ幸いです。PS: 他のコードも同様に歓迎されます。ありがとう

4

2 に答える 2

2

merge dfrベクターを使用できますtGen(後者を data.frame に変換した後)。指定all = TRUEすると、欠落している行を NA で埋めることができます。

dfrM <- merge(dfr, data.frame(t = tGen), all = TRUE)

次に、欠落している値を特定し、次のものに置き換えます-99

dfrM[is.na(dfrM)] <- -99

> dfrM
                    t  d1  d2
1 2012-01-01 00:00:00   2  15
2 2012-01-01 01:00:00   3  14
3 2012-01-01 02:00:00   4  13
4 2012-01-01 03:00:00 -99 -99
5 2012-01-01 04:00:00 -99 -99
6 2012-01-01 05:00:00   5  12
7 2012-01-01 06:00:00   6  11
于 2012-11-29T14:48:00.820 に答える
0

あなたはもうすぐそこにいます!

dfr[subfr, -1] <-  -99   
# assumes that time is your first column, and the rest of the row gets -99



必要に応じて、いくつかの行を結合することもできます。

dfr[is.na(match(tGen,dfr$t)), -1] <-  -99
于 2012-11-29T14:47:17.690 に答える