Может ли кто-нибудь сказать мне, как найти общие элементы из нескольких векторов?
a <- c(1,3,5,7,9)
b <- c(3,6,8,9,10)
c <- c(2,3,4,5,7,9)
Я хочу получить общие элементы из приведенных выше векторов (например: 3 и 9)
Может ли кто-нибудь сказать мне, как найти общие элементы из нескольких векторов?
a <- c(1,3,5,7,9)
b <- c(3,6,8,9,10)
c <- c(2,3,4,5,7,9)
Я хочу получить общие элементы из приведенных выше векторов (например: 3 и 9)
Возможно, есть более умный способ сделать это, но
intersect(intersect(a,b),c)
сделаю свою работу.
РЕДАКТИРОВАТЬ: умнее и удобнее, если у вас много аргументов:
Reduce(intersect, list(a,b,c))
Reduce
и правильном использовании заглавных букв R!
- person mariotomo; 12.08.2011
intersect
предназначен для операций с наборами. Если у вас есть элементы, повторяющиеся в векторах, вы потеряете эту информацию, потому что векторы превращаются в наборы до пересечения. Например. intersect(c(1,1,2,3), c(1,1,3,4))
приведет к c(1,3)
, и вы могли захотеть получить результат c(1,1,3)
.
- person Giora Simchoni; 13.10.2016
N <- max(unlist(L)); LT <- lapply(L, tabulate, nbins = N); v <- do.call(pmin, LT); unlist(sapply(1:N, function(x) rep(x, v[x])))
Другой способ сделать это - использовать функцию match
вместе с отрицательным индексом для итеративного удаления из каждого из векторов каждый элемент добавлен в ядро.
- person Montgomery Clift; 03.10.2019
Это уже хороший ответ, но есть еще пара способов сделать это:
unique(c[c%in%a[a%in%b]])
or,
tst <- c(unique(a),unique(b),unique(c))
tst <- tst[duplicated(tst)]
tst[duplicated(tst)]
Очевидно, вы можете опустить вызовы unique
, если знаете, что в a
, b
или c
нет повторяющихся значений.
intersect_all <- function(a,b,...){
all_data <- c(a,b,...)
require(plyr)
count_data<- length(list(a,b,...))
freq_dist <- count(all_data)
intersect_data <- freq_dist[which(freq_dist$freq==count_data),"x"]
intersect_data
}
intersect_all(a,b,c)
ОБНОВЛЕНИЕ РЕДАКТИРОВАТЬ Более простой код
intersect_all <- function(a,b,...){
Reduce(intersect, list(a,b,...))
}
intersect_all(a,b,c)
c
в качестве имени переменной ... - person Marek   schedule 13.09.2010c(1,2...)
. - person Mathias711   schedule 29.08.2016