R - 从符合给定条件的矩阵中提取线?

时间:2011-07-11 14:55:20

标签: r rows indices

       [,1] [,2] [,3]
[1,]    1    0    0
[2,]    0    1    1
[3,]    0    1    0
[4,]    0    0    1
[5,]    1    0    0

给定如上所述的矩阵 - 迭代矩阵的有效方法是,选择第一个元素为1且所有其他元素为0的行,这样

       [,1] [,2] [,3]    
[1,]    1    0    0    
[2,]    1    0    0

被退回?

谢谢, d。

1 个答案:

答案 0 :(得分:2)

重新创建数据:

a <- array(c(1,0,0,0,1,0,1,1,0,0,0,1,0,1,0), dim=c(5,3))

现在创建一个等于条件的向量。

cond <- c(1, 0, 0)

接下来,调用apply时包含的which语句会告诉您哪些行符合您的条件

which(apply(a, 1, function(x)all(x==cond)))
1] 1 5

最后,要提取满足此条件的行:

x <- which(apply(a, 1, function(x)all(x==cond)))
a[x, ]


     [,1] [,2] [,3]
[1,]    1    0    0
[2,]    1    0    0

生成的数组不包含太多信息。也许您想知道有多少行符合条件?

length(x)
[1] 2

回答后续问题。如何在数组很大时创建条件向量?

嗯,一种方法如下。假设你有一个100列宽的数组,所以你需要一个长度为100的向量,你希望第三个元素是1:

cond <- rep(0, 100)
cond[3] <- 1
cond
  [1] 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 [38] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 [75] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0