我有一个长矩阵,我需要计算一定行间隔的平均值。目前我正在手动执行此操作:
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
必须有一个更好的方法来做到这一点。有人可以帮忙吗?
答案 0 :(得分:4)
如果你有规律的间隔,SeñorO的答案很好。另一种方法,如果你想选择任意行可能是这样的:
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
也可以为任意行执行此操作。这只是一种略有不同的方法。
答案 1 :(得分:3)
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