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

必须有更好的方法来做到这一点。有人可以帮忙吗?

4

2 回答 2

5

如果您有固定的时间间隔,Señor 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也可以对任意行执行此操作。这只是一种稍微不同的方法。

于 2013-07-04T21:06:12.937 回答
4
by(values[,1], ceiling(1:50 / 10), mean)

ceiling(1:50/10)创建一个长度为 50 的向量,每 10 个数字有一个新整数。

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
于 2013-07-04T21:00:53.473 回答