web-dev-qa-db-de.com

Testen Sie, ob ein Vektor ein bestimmtes Element enthält

Wie überprüfe ich, ob ein Vektor einen bestimmten Wert enthält?

464
medriscoll

Hierfür sind sowohl die Funktionen match() (gibt das erste Erscheinungsbild zurück) als auch %in% (gibt einen Booleschen Wert zurück) vorgesehen.

v <- c('a','b','c','e')

'b' %in% v
## returns TRUE

match('b',v)
## returns the first location of 'b', in this case: 2
461
medriscoll

is.element() sorgt für besser lesbaren Code und ist identisch mit %in%

v <- c('a','b','c','e')

is.element('b', v)
'b' %in% v
## both return TRUE

is.element('f', v)
'f' %in% v
## both return FALSE

subv <- c('a', 'f')
subv %in% v
## returns a vector TRUE FALSE
is.element(subv, v)
## returns a vector TRUE FALSE
163
Justin Nafe

Die Funktion any () sorgt für lesbaren Code

> w <- c(1,2,3)
> any(w==1)
[1] TRUE

> v <- c('a','b','c')
> any(v=='b')
[1] TRUE

> any(v=='f')
[1] FALSE
66
Dan Goldstein

Ich werde die Optionen basierend auf der Ausgabe gruppieren. Für alle Beispiele sei der folgende Vektor angenommen.

v <- c('z', 'a','b','a','e')

Zur Überprüfung der Anwesenheit:

% in%

> 'a' %in% v
[1] TRUE

any ()

> any('a'==v)
[1] TRUE

is.element ()

> is.element('a', v)
[1] TRUE

Zum Auffinden des ersten Vorkommens:

match ()

> match('a', v)
[1] 2

Zum Auffinden aller Vorkommen als Indexvektor:

which ()

> which('a' == v)
[1] 2 4

Zum Auffinden aller Vorkommen als logischer Vektor :

==

> 'a' == v
[1] FALSE  TRUE FALSE  TRUE FALSE

Bearbeiten: Entfernen von grep () und grepl () aus der Liste aus den in den Kommentaren genannten Gründen

54
ishandutta2007

Sie können den Operator %in% verwenden:

vec <- c(1, 2, 3, 4, 5)
1 %in% vec # true
10 %in% vec # false
34
ars

Auch um die Position des Elements zu finden "welches" kann als

pop <- c(3,4,5,7,13)

which(pop==13)

und um die Elemente zu finden, die nicht im Zielvektor enthalten sind, kann man dies tun:

pop <- c(1,2,4,6,10)

Tset <- c(2,10,7)   # Target set

pop[which(!(pop%in%Tset))]
18
Armin

Ich mag grep () und grepl () wirklich für diesen Zweck.

grep () gibt einen Ganzzahlvektor zurück, der angibt, wo Übereinstimmungen vorliegen.

yo <- c("a", "a", "b", "b", "c", "c")

grep("b", yo)
[1] 3 4

grepl () gibt einen logischen Vektor mit "TRUE" an der Stelle der Übereinstimmungen zurück.

yo <- c("a", "a", "b", "b", "c", "c")

grepl("b", yo)
[1] FALSE FALSE  TRUE  TRUE FALSE FALSE

Diese Funktionen unterscheiden zwischen Groß- und Kleinschreibung.

11
ojdajuiceman