3

これは、1 時間ごとのスマート メーター データと freq=24 の時系列です。3日かけて計測するので、first day[1:24], second[25:48], third[49:72].

3 日間にわたって 1 時間ごとの平均値を取得したいと考えています。例えば:

(t[1]+t[25]+t[49])/3

そのため、3 日間で平均 24 時間の箱ひげ図を作成できます。

x <- c(0.253, 0.132, 0.144, 0.272, 0.192, 0.132, 0.209, 0.255, 0.131, 
  0.136, 0.267, 0.166, 0.139, 0.238, 0.236, 1.75, 0.32, 0.687, 
  0.528, 1.198, 1.961, 1.171, 0.498, 1.28, 2.267, 2.605, 2.776, 
  4.359, 3.062, 2.264, 1.212, 1.809, 2.536, 2.48, 0.531, 0.515, 
  0.61, 0.867, 0.804, 2.282, 3.016, 0.998, 2.332, 0.612, 0.785, 
  1.292, 2.057, 0.396, 0.455, 0.283, 0.131, 0.147, 0.272, 0.198, 
  0.13, 0.19, 0.257, 0.149, 0.134, 0.251, 0.215, 0.133, 1.755, 
  1.855, 1.938, 1.471, 0.528, 0.842, 0.223, 0.256, 0.239, 0.113)
4

2 に答える 2

10

使いやすいサンプル データのセットを投稿していないため、最初にいくつか生成してみましょう。

time_series = runif(72)

次のステップは、データセットの構造を 1 次元ベクトルから 2 次元マトリックスに変更することです。これにより、インデックスなどを処理する必要が大幅に節約されます。

time_matrix = matrix(time_series, 24, 3)

apply時間平均を計算するために使用します(必要に応じてapplyplyrパッケージを見て、より優れた機能を確認してください。詳細については、このリンクを参照してください):

hourly_means = apply(time_matrix, 1, mean)
> hourly_means
 [1] 0.2954238 0.6791355 0.6113670 0.5775792 0.3614329 0.4414882 0.6206761
 [8] 0.2079882 0.6238492 0.4069143 0.6333607 0.5254185 0.6685191 0.3629751
[15] 0.3715500 0.2637383 0.2730713 0.3170541 0.6053016 0.6550780 0.4031117
[22] 0.6857810 0.4492246 0.4795785

ただし、ggplot2箱ひげ図を事前に計算する必要がない場合は、次のggplot2ようにします。

require(ggplot2)
require(reshape2)
# Notice the use of melt to reshape the dataset a bit
# Also notice the factor to transform Var1 to a categorical dataset
ggplot(aes(x = factor(Var1), y = value), 
       data = melt(time_matrix)) + 
       geom_boxplot()

どちらが得られるか、私が思うに、あなたはどこにいるのですか:

ここに画像の説明を入力

X 軸は 1 日の時間、Y 軸は値です。


注:あなたが持っているデータは時系列です。R には、関数など、時系列を処理する特定の方法がありtsます。私は通常、通常の R データ オブジェクト (配列、行列) を使用しますが、時系列で R ができることの概要については、 TimeSeries CRAN タスクビューを参照してください。

オブジェクトを使用して時間平均を計算するには(このSO 投稿tsに触発されました):

# Create a ts object
time_ts = ts(time_series, frequency = 24)
# Calculate the mean
> tapply(time_ts, cycle(time_ts), mean)
        1         2         3         4         5         6         7         8 
0.2954238 0.6791355 0.6113670 0.5775792 0.3614329 0.4414882 0.6206761 0.2079882 
        9        10        11        12        13        14        15        16 
0.6238492 0.4069143 0.6333607 0.5254185 0.6685191 0.3629751 0.3715500 0.2637383 
       17        18        19        20        21        22        23        24 
0.2730713 0.3170541 0.6053016 0.6550780 0.4031117 0.6857810 0.4492246 0.4795785 
> aggregate(as.numeric(time_ts), list(hour = cycle(time_ts)), mean)
   hour         x
1     1 0.2954238
2     2 0.6791355
3     3 0.6113670
4     4 0.5775792
....
于 2012-08-22T10:17:56.343 に答える
3

boxplotこれは、基本的なRインストールに付属している機能を使用して簡単に行うことができます。元のシリーズとインデックスを使用してdata.frameを作成するだけで、毎日の時間を識別できます。

Data <- data.frame(series=x, time=rep(1:24,3))
boxplot(series ~ time, data=Data)

箱ひげ図の出力

于 2012-08-22T12:54:55.783 に答える