/ / Rで30分ごとに集計する方法-r、プロット、時系列、集計

R - rで30分ごとに集計する方法、プロット、時系列、集計

私はRで立ち往生しています。毎分データを30分ごとに集約する必要があります。私のデータフレームは次のようなものです。

    Date        Time       Power
2008-10-11  23:57:00   0.376
2008-10-11  23:58:00   0.374
2008-10-11  23:59:00   0.374
2008-10-12  0:00:00    0.334
2008-10-12  0:01:00    0.330
...
2008-12-13  19:24:00   1.390
2008-12-13  19:25:00   1.370
2008-12-13  19:26:00   1.368
2008-12-13  19:27:00   1.362
2008-12-13  19:28:00   1.352
2008-12-13  19:29:00   1.360

...

基本的に、2008年のデータは500,979行あります。 毎分は電力値を与えます。時系列を実行するには、30分ごとにデータを集計する必要があります。最終的には約17,520行になります。私の質問は次のとおりです。

  1. Power列にいくつかの欠落値がある場合、時系列をプロットすることは可能ですか?

  2. 電力値を30分で集計するにはどうすればよいですか? (例:0:00:00〜0:29:00、0:30:00〜0:59:00)

どうもありがとうございました!

回答:

回答№1は1

magrittr そして dplyr、新しい列を生成して、測定が含まれる時間単位を与えるグループ化変数を保持できます。 summarise 必要な集計メトリックを計算します。 (注意 %<>% パイプの結果を元の変数に保存します)。

あなたの時間はどのような形式かわかりませんすでに、私がそれを読んだとき、それは単なる文字なので、それを数値の時間に変換するのは少し手間がかかります。すでに他の形式になっている場合は、その手順が簡単になる可能性があります。

df %<>%
mutate(cleanTime =
strsplit(Time, ":") %>%
sapply(function(x){
x <- as.numeric(x)
x[1] + x[2]/60 + x[3]/(60*60)
})
, roundTime = floor(cleanTime * 2)/2
)

次に、生成された変数でグループ化し、必要な集計統計を取得します。

df %>%
group_by(Date, roundTime) %>%
summarise(avgPower = mean(Power)
, sumPower = sum(Power))

与える:

        Date roundTime  avgPower sumPower
<date>     <dbl>     <dbl>    <dbl>
1 2008-10-11      23.5 0.3746667    1.124
2 2008-10-12       0.0 0.3320000    0.664
3 2008-12-13      19.0 1.3670000    8.202

回答№2の場合は1

dplyr あなたは次を行うことができます(あなたは変更することができます mean 集計関数へ):

df %>%
mutate(DateTime = as.POSIXct(paste(Date, Time))) %>%
group_by(DateTime = cut(DateTime, breaks="30 min")) %>%
summarize(Power = mean(Power))

次の出力になります:

             DateTime  Power
<fctr>  <dbl>
1 2008-10-11 23:57:00 0.3576
2 2008-12-13 18:57:00 1.3760
3 2008-12-13 19:27:00 1.3580