如何循环为不同阈值的不同列分配NA

时间:2016-01-28 15:37:05

标签: r

我有一个包含多个列的数据集,对于每一列,我想找到一个阈值,使NA计数在1010-1020之间。以下是我尝试编码的方式。以下是数据的示例。

X1       X2      X3
1.51    0.00    0.00
0.31    3.90    0.00
0.64    13.64   0.00
0.26    9.66    0.00
0.36    0.04    0.00
0.51    0.03    0.00
0.30    0.08    0.02
0.01    0.20    0.04
0.02    0.03    0.00
0.00    0.47    0.00
0.00    1.44    5.54
0.00    2.68    0.74
0.03    0.68    5.49
1.72    0.08    1.54

   threshold=seq(0.5,by=0.1,5)
   for (j in threshold){
      for (i in 1:3){
      data[,i]=ifelse(data[,i]> j,data[,i],NA)
      if((sum(is.na(data[,i]))==range(2,4)) {break
      }
      }}

1 个答案:

答案 0 :(得分:0)

好的,我就是这样做的。

threshold <- rep(NA,50)

for (i in 3:50){

  # Find the number of current NAs
  nNA <- sum(is.na(pred[,i]))

  # Find the 1015th smallest value (minus the number of NAs you already have)
  threshold[i] <- sort(pred[,i])[1015 - nNA]
  pred[pred[,i] < threshold[i],i] <- NA
}

编辑:已更改以适应所有新要求。