さて、次は1と4の間で、あなたに値を与えるだろう:
C <- (A<0) + (B<0)*2L + 1L
をこれが1回で全体の列を変換します。魔法はFALSE/TRUEが0/1として扱われることにあり、あなたは数学を行うことができます。 2と1の代わりに2Lと1Lを使用すると、変換を強制的に2倍にするのではなく、整数として結果を保持します(これは遅くなり、メモリが増えます)。
は、その後、あなたがこれらの象限にマップすると仮定すると:
+B
|
II | I
-A -----+---- +A
III | IV
|
-B
をあなたがこの(data.frameを使用するように更新)を使用することができます:あなたがしたい場合
# Sample data.frame with columns a & b
d <- data.frame(a=c(1,-1,-1,1), b=c(1,1,-1,-1))
quadrantNames <- c('I', 'II', 'IV', 'III') # Your labels...
d <- within(d, c <- quadrantNames[(a<0) + (b<0)*2L + 1L])
head(d) # print data
a b c
1 1 1 I
2 -1 1 II
3 -1 -1 III
4 1 -1 IV
...とをラベルの順序をquadrantNames
に変更するだけです。
私は狂っているのですか、あるいはそれらの不平等が他の方向に進むことを望んでいますか? – joran
[編集]ジョランは正解ですが、不等式は逆になるはずです。そのような迅速な対応のおかげで、両方のおかげで!それは私が心に留めていたものよりずっと簡単でした。好奇心から、 "L"は何を表していますか? – jslefche
@jslefche - Lは、Rに二重ではなく整数を格納するように指示しています。十分なR関数を見れば、コードを高速化できるので、このトリックを頻繁に見つけることができます。 – joran