Подтвердить что ты не робот

Проверьте, существует ли значение в одном кадре данных или нет.

У меня есть два кадра данных (A, B), имеющие одинаковые имена столбцов (C), но могут иметь разные уникальные значения в этом столбце. Я хочу проверить, существует ли "значение" в столбце (C) в кадре данных (A) в кадре данных (B).

A = data.frame(C=c(1,2,3,4))
B = data.frame(C=c(1,3,4,7))

В приведенном выше примере я хочу проверить, присутствует ли "2" в B или нет Есть ли один лайнер без цикла, так как у меня довольно большие файлы, и мне нужно будет проверить это в каждой строке.

4b9b3361

Ответ 1

Используйте %in% следующим образом

A$C %in% B$C

Что скажет вам, какие значения столбца C из A находятся в B.

Возвращается логический вектор. В конкретном случае вашего примера вы получаете:

A$C %in% B$C
# [1]  TRUE FALSE  TRUE  TRUE

Что вы можете использовать в качестве индекса для строк A или как индекс для A$C для получения фактических значений:

# as a row index
A[A$C %in% B$C,  ]  # note the comma to indicate we are indexing rows

# as an index to A$C
A$C[A$C %in% B$C]
[1] 1 3 4  # returns all values of A$C that are in B$C

Мы можем также отрицать это:

A$C[!A$C %in% B$C]
[1] 2   # returns all values of A$C that are NOT in B$C



Если вы хотите узнать, есть ли определенное значение в B $C, используйте ту же функцию:
  2 %in% B$C   # "is the value 2 in B$C ?"  
  # FALSE

  A$C[2] %in% B$C  # "is the 2nd element of A$C in B$C ?"  
  # FALSE