Подсчитайте количество одинаковых значений между двумя векторами - PullRequest
0 голосов
/ 28 мая 2020
a<-c(19,24,34,47,47,47)
b<-c(3,14,24,25,47,47)

Я хочу знать, сколько значений в a совпадает со значениями в b, однако у меня возникают проблемы - когда в обоих векторах присутствуют повторяющиеся числа. Моим желаемым ответом для приведенного выше примера будет 3 - потому что 24,47,47 - разделяются между двумя векторами.

Если я использую пересечение:

intersect(a,b)

[1] 24 47

2-е совпадение 47 игнорируется.

Если я использую% в%:

length(which(a %in% b))
[1] 4

дополнительно 47 в a также считается.

Я понимаю, что могу:

length(which(b %in% a))
[1] 3

Однако у меня также могут быть случаи, когда в b вместо a и поэтому% в% тоже бесполезен. Например:

a<-c(19,24,34,7,47,47)
b<-c(3,14,24,47,47,47)
length(which(b %in% a))
[1] 4 (I want the answer to still be 3)

Итак, без изменения того, какой вектор идет первым в функции% in%, для каждого теста - я не могу понять, как это сделать. Может кто-нибудь показать мне, как?

1 Ответ

1 голос
/ 28 мая 2020

Как насчет:

sum(pmin(
  table(a[a %in% intersect(a, b)]),
  table(b[b %in% intersect(a, b)])
))

Мы делаем table() из фрагментов a, b, общих для обоих, затем берем наименьшие числа из этих таблиц и складываем их вверх.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...