2013-07-04 171 views
2

我有一个长矩阵,其中我需要计算一定行间隔的平均值。目前我这样做是这样手动的:计算行间隔的平均值

values <- cbind(1:50,1) 

meanqual10 <- mean(values[1:10,1]) 
meanqual10 
[1] 5.5 
meanqual15 <- mean(values[11:20,1]) 
meanqual15 
[1] 15.5 
meanqual20 <- mean(values[21:30,1]) 
meanqual20 
[1] 25.5 
meanqual25 <- mean(values[31:40,1]) 
meanqual25 
[1] 35.5 
meanqual30 <- mean(values[41:50,1]) 
meanqual30 
[1] 45.5 

必须有一个更好的方式来做到这一点。任何人都可以帮忙吗?

回答

3
by(values[,1], ceiling(1:50/10), mean) 

ceiling(1:50/10)使用每10个数字的新整数创建长度为50的矢量。

by然后将采取mean为每个相同的整数组。

结果:

ceiling(1:50/10): 1 
[1] 5.5 
------------------------------------------------------------------------------------------------------ 
ceiling(1:50/10): 2 
[1] 15.5 
------------------------------------------------------------------------------------------------------ 
ceiling(1:50/10): 3 
[1] 25.5 
------------------------------------------------------------------------------------------------------ 
ceiling(1:50/10): 4 
[1] 35.5 
------------------------------------------------------------------------------------------------------ 
ceiling(1:50/10): 5 
[1] 45.5 
+0

非常好,我还不知道天花板呢。我仍然对R – jaspb

4

阅兵式O公司的回答是不错的,如果你有定期。另一种方法,如果您想选择任意行可能是这样的:

l <- list(1:10,11:20,21:30,31:40,41:50) # vectors of any length or ordering 
sapply(l, function(x) mean(values[x,1])) 

其中给出:

[1] 5.5 15.5 25.5 35.5 45.5 

当然by可以任意行做到这一点,也和。这只是一个稍微不同的方法。

+0

感兴趣,感谢您提供有关如何使用sapply的另一个见解。 – jaspb