合計 - r 行列 掛け算




R-複数の条件を満たす行列の行を選択する最速の方法 (3)

Rにおける絶対的な最速の方法はifelseあり、 ifとは異なりベクトル化された条件式が許される。 条件式のベクトルをキャッシュすることもできます(例: isSeven <- mat[, 'two'] == 7 )、後で使用/再利用します。

私はここに再現可能な例はありませんが、私は

ifelse(mat[, 'two'] == 7 & mat[, 'three'] == 12, "both", "not both")

そこに他の条件文を追加することもできますし、適合可能なベクトルになるものを返すこともできます。

これは、Rの条件を満たす行列の行を返す問題の拡張です。行列があるとします

       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
 [6,]   1   6    15   20
 [7,]   5   7    12   20

私はmatrix$two == 7matrix$three == 12をできるだけ速く返すすべての行を返したいと思います。 これは私がそれを行うことを知っている方法です:

 out <- mat[mat$two == 7,]
 final_out <- out[out$three == 12, ]

final_out <- which(mat$two == 7 && mat$three == 12)ように、2行よりも速く簡潔なone-linerでfinal_outの内容を取得する方法があるはずです上記のコードの

この複数の条件行列クエリを返す最も速いRコードは何ですか?


arr.ind=TRUEarr.ind=TRUE使用する:

> mat[which(mat[,"two"]==7 & mat[,"three"] == 12, arr.ind = TRUE),]
  one two three four
2   2   7    12   17
7   5   7    12   20

論理的な比較でサブセットを使うだけです...

#  Reproducible data
set.seed(1)
m <- matrix( sample(12,28,repl=T) , 7 , 4 )
     [,1] [,2] [,3] [,4]
[1,]    4    8   10    3
[2,]    5    8    6    8
[3,]    7    1    9    2
[4,]   11    3   12    4
[5,]    3    3    5    5
[6,]   11    9   10    1
[7,]   12    5   12    5


#  Subset according to condition
m[ m[,2] == 3 & m[,3] == 12 , ]
[1] 11  3 12  4




multiple-columns