删除一列中的值不在“ [0,1]”范围内的行

时间:2019-05-01 10:42:14

标签: r matrix

我正在处理矩阵中存储的大量数据,我想删除一列中的值不在[0,1]范围内的所有行。如果矩阵是M(仅是3 x 3矩阵的示例),我尝试使用此代码

m<-matrix(c(1,0,2,0.7,0.8,0.5,-0.6,0.11,0.4),3,3)
      [,1] [,2]  [,3]
[1,]    1  0.7 -0.60
[2,]    0  0.8  0.11
[3,]    2  0.5  0.40

对于此示例,我应该删除第一行和第三行。我想到的唯一解决方案是基于for循环和

for(i in 1:n){
  array[i]<-sum(m[i,]<0, na.rm=TRUE)+sum(m[i,]>1, na.rm=TRUE)
}
for(i in 1:nrow(m)){
  if (array[i]!=0){
    m<-m[-i,]
    array<-array[-i]
  }
}

有没有更有效的解决方案?谢谢!

2 个答案:

答案 0 :(得分:1)

我们可以直接按元素比较矩阵的值并创建逻辑矩阵,然后使用rowSums

选择行
m[rowSums(m <= 1 & m >= 0) == ncol(m), ]
#[1] 0.00 0.80 0.11

或者另一种做同一件事的方法

m[rowSums(m > 1 | m < 0) == 0, ]

对于上述两个版本,我们还可以将applymargin = 1逐行使用,以对数据进行子集

m[apply(m <= 1 & m >= 0, 1, all), ]
m[!apply(m > 1 | m < 0, 1, any), ]

答案 1 :(得分:1)

还有一种可能性:

m[apply(m, 2, function(x) all(x >= 0) & all(x <= 1)), ]

[1] 0.00 0.80 0.11