编程很新 - 我有一个尺寸为821的数组,我想取每3个值的平均值。每行代表月度数据,我需要季度平均值(因此每3个月)。我想用for循环来练习,但我无法弄明白。
答案 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整除,所以最后一行是一个很难解决的问题。