2016-07-22 10 views
-2

プログラミングには全く新しい - 私は次元821の配列を持ち、3つの値の平均を取ってみたい。各行は毎月のデータを表し、私は四半期ごとの平均(3ヶ月毎)が必要です。私は練習用のforループを使ってやりたいのですが、私はそれを理解できません。R - forループを使用して配列内の3つの値の平均を計算する

+0

サイズ821の配列は1列、821行を意味しますか?平均値(1位、2位、3位)、平均値(2位、3位、4位)などが必要ですか? – JackeJR

+0

確かに、1列に821行分の月次データがあります。しかし、平均(1位、2位、3位)、平均(4位、5位、6位)などが必要です。したがって、最初の計算は1年目の平均であり、2回目の計算は2年目のようになります。 – Cam23

答えて

2

コメントの説明。

# Create some dummy data. I created one with 822 values instead of 821 because 821 is not divisible without remainder by 3. 
vec.dummy <- sample(1:100, 822, replace = TRUE) 

# Use the values and create a matrix with 3 columns. 
mat.dummy <- matrix(vec.dummy, ncol = 3, byrow = TRUE) 

# Take the row means of each row. 
rowMeans(mat.dummy) 
0

問題がない場合は、Rのforループを使用しないでください。ちょっと離れて、あなたは最終的にそれを必要とする問題に遭遇します。これはしません。

はここplyrを使用して別のアプローチです:

library(plyr) 

    array <- rnorm(821) #The array you want to average 

    div <- 822/3 #Need an integer number of dividers 

    position <- rep(1:div, each=3) 

    data <- data.frame(
      "array"=array, 
      "position"=position[1:(length(position)-1)] 
      ) 

    head(data) 

      array position 
    1 -0.005807528  1 
    2 0.997539073  1 
    3 1.172736615  1 
    4 0.371252122  2 
    5 1.291737080  2 
    6 0.796526756  2 

    #use plyr to average "array" by common values in other column of DF 
    data <- ddply(data, c("array"), numcolwise(mean)) 

    head(data) 

      array position 
    1 -3.269147  258 
    2 -3.076415  158 
    3 -2.962204  242 
    4 -2.679143  19 
    5 -2.306075  231 
    6 -2.283344  223 

2番目の列を持つあなたは、ベクター内のユニークな値を追跡することができます。それはあなたのデータの四分の一かもしれません。ここでは、@ Cam23によって要求されたよう

+0

forループを使ってこれを解決したいのであれば、どうすればいいですか? – Cam23

+0

@ Cam23私の2番目の答えを確認してください。 – Warner

0

は、私はお勧めしませんループ形でソリューションです:

array <- rnorm(821) 

div <- 822/3 

threes <- c(0, 3*(1:(div-1))) 

finalArray <- numeric() 

for(i in 1:length(threes)){ 
    calculation <- mean(array[threes[i]+1:3]) 
    finalArray <- c(finalArray, calculation) 
} 

finalArray[274] <- mean(array[820:821]) 

最後の行が原因821が3によってきれいに割り切れないという事実にjanky修正です

関連する問題