Как найти общие элементы из нескольких векторов? Может ли кто-нибудь сказать мне, как найти общие элементы из нескольких векторов? a <- c(1,3,5,7,9) b <- c(3,6,8,9,10) c <- c(2,3,4,5,7,9) Я хочу получить общие элементы из указанных выше векторов (например: 3 и 9) Ответ 1 Возможно, существует более умный способ, но intersect(intersect(a,b),c) выполнит эту работу. EDIT: более умно и удобнее, если у вас много аргументов: Reduce(intersect, list(a,b,c)) Ответ 2 Хороший ответ уже есть, но есть еще несколько способов сделать это: unique(c[c%in%a[a%in%b]]) или, tst <- c(unique(a),unique(b),unique(c)) tst <- tst[duplicated(tst)] tst[duplicated(tst)] Очевидно, вы можете опустить вызовы unique, если знаете, что в пределах a, b или c нет повторяющихся значений. Ответ 3 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)
Ответ 1 Возможно, существует более умный способ, но intersect(intersect(a,b),c) выполнит эту работу. EDIT: более умно и удобнее, если у вас много аргументов: Reduce(intersect, list(a,b,c))
Ответ 2 Хороший ответ уже есть, но есть еще несколько способов сделать это: unique(c[c%in%a[a%in%b]]) или, tst <- c(unique(a),unique(b),unique(c)) tst <- tst[duplicated(tst)] tst[duplicated(tst)] Очевидно, вы можете опустить вызовы unique, если знаете, что в пределах a, b или c нет повторяющихся значений.
Ответ 3 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)