私は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行になります。私の質問は次のとおりです。
Power列にいくつかの欠落値がある場合、時系列をプロットすることは可能ですか?
電力値を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