【问题标题】:find mean of a column in a matrix with multiple conditions在具有多个条件的矩阵中查找列的平均值
【发布时间】:2016-11-02 21:45:09
【问题描述】:

我有一个名为风暴报告的 4 列矩阵,第一列是风暴严重程度的排名指数,第三列是风暴中冰雹报告的数量。我被要求找出平均数量的冰雹报告(第 3 栏),排名指数大于 0.25(第 1 栏)。有人告诉我可以使用 which 语句。太感谢了。这是一个示例矩阵:

样本矩阵:

strm_reports <- matrix(c(0.276, 20, 108, 21,
0.494, 10, 247, 31,
0.008, 14, 38,  49,
0.076, 1,  232, 30,
0.085, 7,  97,  5), ncol = 4)

这是我尝试过的:

mean_hail<-mean(sum(ifelse(strm_reports[,3] & strm_reports[,1]>0.25,1,0)))

【问题讨论】:

    标签: r matrix mean


    【解决方案1】:

    你说得对,which一个要走的路

    mean(strm_reports[which(strm_reports[,1] > .25), 3])
    

    如果你在理解上有困难,你应该单步执行上面的代码:

    which(strm_reports[,1] > .25) #returns row indices for TRUE statements
    
    #returns only the values from the column we're interested in
    strm_reports[which(strm_reports > .25), 3] 
    

    其实我们不用which

    strm_reports[,1] > .25 #returns a vector of TRUE and FALSE
    strm_reports[strm_reports[,1] > .25, 3] 
    mean(strm_reports[strm_reports[,1] > .25, 3])
    

    【讨论】:

      【解决方案2】:

      使用dplyr 包的另一种方法

      filter(strm_reports,strm_reports[,1]>0.25) %>% mutate(Mean_C3 = mean(C3))
      

      数据

      strm_reports <- matrix(c(0.276, 20, 108, 21,
      0.494, 10, 247, 31,
      0.008, 14, 38,  49,
      0.076, 1,  232, 30,
      0.085, 7,  97,  5), ncol = 4,byrow = TRUE)
      strm_reports <- as.data.frame.matrix(strm_reports)
      colnames(strm_reports) <- paste("C",1:4,sep = "")
      

      【讨论】:

        猜你喜欢
        • 2014-05-16
        • 2017-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多