合計 - 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 == 7
とmatrix$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=TRUE
でarr.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