R - 使用for循环计算数组中每3个值的平均值

时间:2016-07-22 15:52:56

标签: arrays r for-loop

编程很新 - 我有一个尺寸为821的数组,我想取每3个值的平均值。每行代表月度数据,我需要季度平均值(因此每3个月)。我想用for循环来练习,但我无法弄明白。

3 个答案:

答案 0 :(得分:2)

评论中的解释。

position: relative; top: 100px

答案 1 :(得分: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 :(得分:0)

根据@ Cam23的要求,这是一个循环形式的解决方案,我不建议:

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整除,所以最后一行是一个很难解决的问题。