【问题标题】:Finding the mean of a subset of a matrix求矩阵子集的均值
【发布时间】:2013-10-15 01:23:50
【问题描述】:

我正在为一些非常简单的事情而苦苦挣扎。我试图找到矩阵子集的平均值。例如,我想找到矩阵中每行最后 196 个元素的平均值。

我的代码如下:

for (i in 1:length(ratios))  
{  
    mean(ratios[length(ratios[,1])-196:length(ratios[,1]),i])  
} 

任何帮助将不胜感激!

【问题讨论】:

    标签: r subset mean


    【解决方案1】:

    这是一种更直接的方法

    >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 ) )
    【解决方案2】:

    我实际上刚刚解决了这个问题。出于某种原因,您需要在比率矩阵的行部分周围插入括号,如下所示:

    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)]
    • @SimonO101 谢谢。该代码旨在显示更好的可能性。我没有检查所有内容。
    • @Roland 非常感谢,代码运行良好!比我的效率高很多
    • @Roland 是否有一个函数可以找到每行最后 196 个元素的标准差?
    • @Mike 你想做什么,因为你接受的答案没有找到每行最后 196 个元素的平均值。它找到最后 196 行的平均值。那是不同的。
    猜你喜欢
    • 2012-06-22
    • 1970-01-01
    • 2014-06-23
    • 2018-05-24
    • 2018-03-16
    • 1970-01-01
    • 2018-12-02
    • 1970-01-01
    • 2013-09-29
    相关资源
    最近更新 更多