Хорошо, следующее даст вам значения от 1 до 4:
C <- (A<0) + (B<0)*2L + 1L
Это превращает весь столбец за один раз. Волшебство заключается в том, что ЛОЖЬ / ИСТИНА трактуется как 0/1, и вы можете делать математику на нем. Используя 2L и 1L вместо 2 и 1, вы сохраняете результат в виде целых чисел вместо принудительного приведения к удвоениям (что медленнее и занимает больше памяти).
Затем при условии, что вы хотите отобразить следующие сектора:
+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
.