在R中,select符合条件的matrix的行

在R中用matrix:

one two three four [1,] 1 6 11 16 [2,] 2 7 12 17 [3,] 3 8 11 18 [4,] 4 9 11 19 [5,] 5 10 15 20 

我想提取行的列为3 = 11的子matrix。即:

  one two three four [1,] 1 6 11 16 [3,] 3 8 11 18 [4,] 4 9 11 19 

我想这样做没有循环。 我是R新手,所以这可能是非常明显的,但文档往往是简单的。

如果使用as.data.frame()将matrix转换为数据框,这样做更容易。 在这种情况下,以前的答案(使用子集或三元)将起作用,否则他们不会。

要在matrix上执行操作,可以按名称定义一个列:

 m[m[, "three"] == 11,] 

或按号码:

 m[m[,3] == 11,] 

请注意,如果只有一行匹配,则结果是整数向量,而不是matrix。

 m <- matrix(1:20, ncol = 4) colnames(m) <- letters[1:4] 

以下命令将select上述matrix的第一行。

 subset(m, m[,4] == 16) 

这将select最后三个。

 subset(m, m[,4] > 17) 

结果将是两种情况下的matrix。 如果你想使用列名来select列,那么你最好把它转换成一个数据框

 mf <- data.frame(m) 

然后你可以select

 mf[ mf$a == 16, ] 

或者,您可以使用子集命令。

我将select一个简单的方法使用dplyr包。

如果dataframe是数据。

 library(dplyr) result <- filter(data,data$three == 11) 

如果你的matrix被称为m ,只需使用:

 R> m[m$three == 11, ] 

子集是一个非常慢的function,我个人觉得它没用。

我假设你有一个data.frame,数组,matrix称为与ABC作为列名称; 那么你所需要做的就是:

  • 在一列中有一个条件的情况下,可以说列A

     Mat[which(Mat[,'A'] == 10), ] 

在不同列上有多个条件的情况下,可以创build一个虚拟variables。 假设条件是A = 10B = 5C > 2 ,那么我们有:

  aux = which(Mat[,'A'] == 10) aux = aux[which(Mat[aux,'B'] == 5)] aux = aux[which(Mat[aux,'C'] > 2)] Mat[aux, ] 

通过使用system.timetesting速度优势, which方法比subset方法快10倍。