【发布时间】:2013-10-15 01:23:50
【问题描述】:
我正在为一些非常简单的事情而苦苦挣扎。我试图找到矩阵子集的平均值。例如,我想找到矩阵中每行最后 196 个元素的平均值。
我的代码如下:
for (i in 1:length(ratios))
{
mean(ratios[length(ratios[,1])-196:length(ratios[,1]),i])
}
任何帮助将不胜感激!
【问题讨论】:
我正在为一些非常简单的事情而苦苦挣扎。我试图找到矩阵子集的平均值。例如,我想找到矩阵中每行最后 196 个元素的平均值。
我的代码如下:
for (i in 1:length(ratios))
{
mean(ratios[length(ratios[,1])-196:length(ratios[,1]),i])
}
任何帮助将不胜感激!
【问题讨论】:
这是一种更直接的方法
>rowMeans(tail(ratios, 196))
tail(ratios, 196) 返回ratios 每一行的最后196 个元素,rowMeans 计算每一行的平均值。
在您的 axample 中,您使用的是 col 手段,而不是 row meas,所以请尝试:
>colMeans(tail(ratios,10))
这是一个例子
> ratios <- iris[, sapply(iris, is.numeric)]
> Means <- numeric(ncol(ratios))
> for (i in 1:length(ratios))
{
Means[i] <- (mean(ratios[(length(ratios[,1])-10):length(ratios[,1]),i]))
}
> COLMeans <- colMeans(tail(ratios,10))
> Means ## Using `for` loop
[1] 6.490909 3.036364 5.336364 2.163636
> COLMeans # using `tail` and `colMeans`
Sepal.Length Sepal.Width Petal.Length Petal.Width
6.45 3.03 5.33 2.17
【讨论】:
tail( ratios , 196 ) 将给出ratios 的最后 196 行,而不是每行的最后 196 个元素!尝试使用 colMeans 的转置...colMeans( tail( t(m) , 196 ) )
我实际上刚刚解决了这个问题。出于某种原因,您需要在比率矩阵的行部分周围插入括号,如下所示:
for (i in 1:length(ratios)){
mean(ratios[(length(ratios[,1])-196):length(ratios[,1]),i])
}
希望对遇到类似问题的人有所帮助
【讨论】:
rowMeans(ratios[(length(ratios[,1])-196):length(ratios[,1]), ]。并且需要括号,因为: 优先。 PS:如果你真的想要每行的最后 196 个元素,你需要rowMeans(ratios[, (ncol(ratios)-196):ncol(ratios)]。