Kann mir jemand sagen, wie man die gemeinsamen Elemente aus mehreren Vektoren findet?
a <- c(1,3,5,7,9)
b <- c(3,6,8,9,10)
c <- c(2,3,4,5,7,9)
Ich möchte die gemeinsamen Elemente aus den obigen Vektoren erhalten (Beispiel: 3 und 9).
c(1,2...).
Kann mir jemand sagen, wie man die gemeinsamen Elemente aus mehreren Vektoren findet?
a <- c(1,3,5,7,9)
b <- c(3,6,8,9,10)
c <- c(2,3,4,5,7,9)
Ich möchte die gemeinsamen Elemente aus den obigen Vektoren erhalten (Beispiel: 3 und 9).
c(1,2...).
Antworten:
Es könnte einen klügeren Weg geben, dies zu tun, aber
intersect(intersect(a,b),c)
wird den Job machen.
EDIT: Klüger und bequemer, wenn Sie viele Argumente haben:
Reduce(intersect, list(a,b,c))
Reduceund die korrekte R-Großschreibung!
intersectfür festgelegte Operationen gilt. Wenn Elemente in den Vektoren wiederkehren, verlieren Sie diese Informationen, da die Vektoren vor dem Schneiden in Mengen umgewandelt werden. ZB intersect(c(1,1,2,3), c(1,1,3,4))würde dazu führen c(1,3), und Sie könnten das Ergebnis gewollt haben c(1,1,3).
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])))Eine andere Möglichkeit besteht darin, die matchFunktion zusammen mit der negativen Subskription zu verwenden, um iterativ aus jedem der Vektoren zu entfernen jedes Element, das dem "Kernel" hinzugefügt wurde.
Eine gute Antwort bereits, aber es gibt noch einige andere Möglichkeiten, dies zu tun:
unique(c[c%in%a[a%in%b]])
oder,
tst <- c(unique(a),unique(b),unique(c))
tst <- tst[duplicated(tst)]
tst[duplicated(tst)]
Sie können natürlich die weglassen uniqueAnrufe , wenn Sie wissen , dass es keine wiederholten Werte innerhalb a, boder 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)
UPDATE EDIT Ein einfacher Code
intersect_all <- function(a,b,...){
Reduce(intersect, list(a,b,...))
}
intersect_all(a,b,c)
cals Variablenname zu verwenden ...