Я хотел бы сравнить два столбца одновременно. Мои данные выглядит следующим образом:Сравнение двух столбцов двух блоков данных (логических операторов)
a <- data.frame("a1" = c(1,1,1,3,4), "a2" = c(2,1,2,1,2))
b <- data.frame("b1" = c(1,1,3,1,3), "b2" = c(2,2,1,2,1))
cbind(a, b)
# a1 a2 b1 b2
# 1 1 2 1 2
# 2 1 1 1 2
# 3 1 2 3 1
# 4 3 1 1 2
# 5 4 2 3 1
Я хотел бы, чтобы идентифицировать все строки а, где a1
не в b1
или где a1
находится в b1
ноa2
специальной a1
не в b2
для специальный b2
. Итак, второй вопрос: когда a1
находится в b1
, тогда a2
для этой строки для a1
также в b2
для этой строки для b1
.
Пример для строки 2: Я проверяю, если a1 = 1
находится где угодно в b1 = c(1,1,3,1,3)
. Это так, я хочу проверить, a2 = 1
в строке 2 (где a1 = 1
) находится где угодно в b2
, где b1 = a1 = 1
, поэтому здесь b2 = c(2, 2, 2)
. Для строки 2 a2 = 1
нет в b2 = c(2, 2, 2)
, поэтому результат должен показать мне эту строку.
Первый вопрос легко ответить на следующий код:
a[which(!(a$a1 %in% b$b1)), ]
# a1 a2
# 5 4 2
Но я не могу исправить вторую проблему. Возможно, я неправильно работаю с логическими операторами. Мой результат должен выглядеть следующим образом:
a1 a2
2 1 1
4 4 2
Он не может работать с оператором '% in %'. Используя его, вы выполняете поиск во всех векторах без указания порядка. См., Например, результат 'c (1,2,3)% в% c (3,1,2)'. –
Непонятно, хотите ли вы сделать это «по-гречески» или по всему миру. Но, как вы сказали, все 'a $ a2' находятся в' b $ b2', поэтому ваше «или» условие всегда «FALSE» – Cath
@Pascal. Результатом вашего минимального примера является «TRUE TRUE TRUE» - и это то, что Я хочу. – user5514978