【问题标题】:Check each cell for non-zero value in a matrix and apply function from non-zero value cell upto last cell in R检查矩阵中每个单元格的非零值,并将函数从非零值单元格应用到 R 中的最后一个单元格
【发布时间】:2019-08-19 09:53:37
【问题描述】:

我在 R 中有一个如下所示的矩阵: 0 0 1 0 2 0 4

    #Create Matrix
    value <- c(0,0,1,0,2,0,4)
    dff = matrix(value)
    #Calculate Mean 
    mean(dff[,1])

给出 1 作为答案,但我希望平均值为 1+0+2+0+4/5 = 7/5 = 1.4 因此,基本上我希望算法找到第一个非零值(在本例中为 1)并将其用作系列 (1,0,2,0,4) 的起点。

这里的这个查询 - Apply function to each cell of matrix in R - 与我想做的类似,但我似乎无法将它应用到这个上下文中。任何帮助,将不胜感激!谢谢!

【问题讨论】:

  • mean(tail(value, -(which(value!=0)[1]-1)))

标签: r loops matrix apply


【解决方案1】:

我们可以将矩阵转换为向量,获取第一个非零值的索引,子集然后取mean

temp <- c(dff)
mean(temp[which.max(temp != 0) : length(temp)])
#[1] 1.4

【讨论】:

  • 或不转换为矢量:mean(dff[which.max(dff[,1] != 0) : length(dff)])
  • 感谢@Ronak Shah 和@patL 的及时答复!有几列,所以我使用下面的代码循环遍历每一列。我必须找出平均值和 SD 等等。有效! M1 = matrix(nrow = 2, ncol = ncol(sku4b2t))for (i in 1:ncol(sku4b2t)){M1[1,i] = mean(sku4b2t[which.max(sku4b2t[,1] != 0) : length(sku4b2t[,1]),i])M1[2,i] = sd(sku4b2t[which.max(sku4b2t[,1] != 0) : length(sku4b2t[,1]),i])}`
猜你喜欢
  • 1970-01-01
  • 2018-11-15
  • 2021-12-03
  • 2017-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-19
  • 1970-01-01
相关资源
最近更新 更多