【问题标题】:How do I find peak values/row numbers?如何找到峰值/行数?
【发布时间】:2010-12-07 06:23:53
【问题描述】:

我有一个大型数据集(202k 点)。我知道有 8 个超过 0.5 的值。我想对这些行进行子集化。

如何查找/返回值 > 0.5 的行号列表?

【问题讨论】:

  • 你已经去掉了 R 标签。那你用什么语言工作?如果没有环境的一些迹象,这个问题就无法回答。

标签: r subset


【解决方案1】:

如果数据集是一个名为x的向量:

(1:length(x))[x > 0.5]

如果数据集是名为x 的data.frame 或矩阵,并且感兴趣的变量在j 列中:

(1:nrow(x))[x[,j] > 0.5]

但是,如果您只想找到子集而不真的需要行号,请使用

subset(x, x > 0.5)

对于一个向量和

subset(x, x[,j] > 0.5)

对于矩阵或 data.frame。

【讨论】:

  • 非常感谢!那成功了。在发现此评论已发布之前,我有点自己弄清楚了,但这正是我所做的。
【解决方案2】:

which(x > 0.5)

【讨论】:

    【解决方案3】:

    这是一些虚拟数据:

    D<-matrix(c(0.6,0.1,0.1,0.2,0.1,0.1,0.23,0.1,0.8,0.2,0.2,0.2),nrow=3)
    

    看起来像:

    > D
         [,1] [,2] [,3] [,4]
    [1,]  0.6  0.2 0.23  0.2
    [2,]  0.1  0.1 0.10  0.2
    [3,]  0.1  0.1 0.80  0.2
    

    这是逻辑行索引,

    index <- (rowSums(D>0.5))>=1
    

    你可以用它来提取你想要的行:

    PeakRows <- D[index,]
    

    看起来像这样:

    > PeakRows
         [,1] [,2] [,3] [,4]
    [1,]  0.6  0.2 0.23  0.2
    [2,]  0.1  0.1 0.80  0.2
    

    【讨论】:

      【解决方案4】:

      使用参数arr.ind=TRUEwhich 是查找条件为TRUE 的行(或列)号的好方法,

      df <- matrix(c(0.6,0.2,0.1,0.25,0.11,0.13,0.23,0.18,0.21,0.29,0.23,0.51), nrow=4)
      
      #      [,1] [,2] [,3]
      # [1,] 0.60 0.11 0.21
      # [2,] 0.20 0.13 0.29
      # [3,] 0.10 0.23 0.23
      # [4,] 0.25 0.18 0.51
      

      whicharr.ind=TRUE 返回条件为TRUE 的数组索引

      which(df > 0.5, arr.ind=TRUE)
           row col
      [1,]   1   1
      [2,]   4   3
      

      所以子集变成了

      df[-which(df > 0.5, arr.ind=TRUE)[, "row"], ]
      
      #      [,1] [,2] [,3]
      # [1,]  0.2 0.13 0.29
      # [2,]  0.1 0.23 0.23
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-09-27
        • 2018-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-21
        相关资源
        最近更新 更多