-1

41行21列のデータセットがあります。DFでは、各行は1日の15分間隔(午前10時から午後8時まで)のエネルギーデータを表します。各列は、1か月の月内の選択された日を表します。

次の式を使用して、各列の2行の負荷変動(標準偏差/平均)を把握する必要があります。

http://i.stack.imgur.com/inOKV.jpg

つまり、1番目と2番目の間。1番目、2番目、3番目。1〜4日; 1〜5日; 各列の要素など。

「lv」でNA値を取得し続けているのですが、なぜだろうと思います。最終結果、lvのデータフレームは41x21で、dfと同じですが、負荷が変動します。

また、負荷の変動性以外に、ループ内で2.5パーセンタイルと97.5パーセンタイルを取得するにはどうすればよいですか?

x <- df[1:41,1:21]

#calculate load variability 
count = 0
i=1{
for (i in 1:41){
     count = count+1  
     mean = sum (x[1:l,])/count
     diff = ((x-mean)^2)
     lv= sqrt((diff/(count+1)-1)/mean)
         i = i+1
  }
}
lv

lvはnull値(NA)で終わります。

4

2 に答える 2

3

各行の標準偏差/平均を計算する場合は、次を試してください。

apply(x, 1, sd)/rowMeans(x)

各行の 2.5% と 97.5% の信頼水準が必要な場合は、次を試してください。

apply(x, 1, quantile, c(.025, 0.975))
于 2012-08-14T13:18:43.680 に答える
1

わかりました、何度か試した後(およびこの質問からの助け)、最終的に次のようになりました。

cumul_loading <- function(x, leave.nan=FALSE){
  ind_na <- !is.na(x)
  nn <- cumsum(ind_na)
  x[!ind_na] <- 0

  cumul_mean <- cumsum(x) / nn
  cumul_sd <- sqrt(cumsum(x^2) / (nn-1) - (cumsum(x))^2/(nn-1)/nn)

  if(leave.nan) return(cumul_sd / cumul_mean) else 
    return((cumul_sd / cumul_mean)[-1])
}

いくつかのバグ (NA をどうするかなど) があるはずですが、現在はapply関数で動作するはずです。leave.nan引数は、必要に応じて生成された NaN をそのままにします。n_len - 1 = 0

apply(x, 2, cumul_loading)
于 2012-08-14T14:10:13.323 に答える