Поиск значений, присутствующих в двух или более векторах неравной длины - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть следующие два числовых вектора:

A <- c(1, 3, 5, 7, 9)
B <- c(2, 3, 4, 5, 6, 10, 12, 13)

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

C <- c(3, 5)

Я также хочу сгенерировать вектор D, содержащий значения, присутствующие в A, но не представленные в B, и вектор E, содержащий значения, присутствующие вB но не A.

D <- c(1, 7, 9)
E <- c(2, 4, 6, 10, 12, 13)

Каков наилучший способ сделать это, используя базу R?Спасибо!

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019
A <- c(1, 3, 5, 7, 9)
B <- c(2, 3, 4, 5, 6, 10, 12, 13)
C <- A[!A%in%B]
D <- B[!B%in%A]

Что дает

> C
[1] 1 7 9
> D
[1]  2  4  6 10 12 13
0 голосов
/ 22 февраля 2019

Вы можете использовать базовую функцию R intersect().

Кроме того, вообще говоря, я бы не использовал C в качестве имени переменной, так как оно действительно близко к c(), что может привести кпроблемы.

A <- c(1, 3, 5, 7, 9)
B <- c(2, 3, 4, 5, 6, 10, 12, 13)

Inter <- intersect(A, B)

[1] 3 5

Для противоположности `intersect () ':

#taken from here:https://www.r-bloggers.com/outersect-the-opposite-of-rs-intersect-function/
outersect <- function(x, y) {
  sort(c(setdiff(x, y),
         setdiff(y, x)))
}

outersect(A, B)
[1]  1  2  4  6  7  9 10 12 13
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...