【问题标题】:check column values and print/delete rows satisfying condition based on percent of columns根据列的百分比检查列值并打印/删除满足条件的行
【发布时间】:2013-03-22 15:54:41
【问题描述】:

我有一个值矩阵,每行排列在不同的列中。 我想让我的代码做什么:

  1. 遍历一行 -> 检查列的值是否
  2. 在行内,如果有 80% 的列满足该条件,则保留该行;否则删除整行。

到目前为止的代码:

myfilt <- function(t,x){
             if ((length(which(t[x,] > 1)) / 60) >= 0.8){
               return(1)
             }else{
               return(0)
             }
          }

y=c()
for(i in 1:length(t[,1])){
   y = c(y,myfilt(t,i))
}

但是当我打印 t[v,] 时,所有行都具有相同的值:( 不知道我做错了什么。另外,如果有更短的方法可以做到这一点,请告诉我。

附: : 这里的 't' 是我正在测试的矩阵的名称

【问题讨论】:

    标签: r if-statement for-loop rows


    【解决方案1】:

    这是一种方法:

    ## Parameters
    threshold <- 0.8
    perc.to.keep <- 0.5
    ## Example Matrix
    set.seed(1337)
    m <- matrix(rnorm(25,1,1),nrow=5,ncol=5)
    
    #           [,1]      [,2]        [,3]       [,4]      [,5]
    # [1,] 1.7122837 0.8383025 -0.02718379  2.2157099 2.1291008
    # [2,] 0.2462742 2.4602621 -0.04117532 -0.6214087 1.4501467
    # [3,] 1.0381899 3.0094584  0.12937698  0.9314247 1.0505864
    # [4,] 2.1784211 0.9220618  1.85313022  0.9370171 0.8756698
    # [5,] 0.8467962 2.3543421  0.37723981  2.0757077 1.9120115
    
    test <- m < threshold
    sel <- apply(test,1,function(v) sum(v)/length(v)) < perc
    m[sel,]
    
    #           [,1]      [,2]        [,3]      [,4]      [,5]
    # [1,] 1.7122837 0.8383025 -0.02718379 2.2157099 2.1291008
    # [2,] 1.0381899 3.0094584  0.12937698 0.9314247 1.0505864
    # [3,] 2.1784211 0.9220618  1.85313022 0.9370171 0.8756698
    # [4,] 0.8467962 2.3543421  0.37723981 2.0757077 1.9120115
    

    【讨论】:

      猜你喜欢
      • 2020-06-10
      • 2018-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-23
      • 2020-01-09
      • 2016-04-15
      • 1970-01-01
      相关资源
      最近更新 更多