Sprawdź, czy wektor zawiera dany element

Jak sprawdzić, czy wektor zawiera daną wartość?

 403
Author: zx8754, 2009-07-23

7 answers

Obie funkcje match() (zwraca pierwszy wygląd) i %in% (zwraca Boolean) są do tego przeznaczone.

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

'b' %in% v
## returns TRUE

match('b',v)
## returns the first location of 'b', in this case: 2
 407
Author: medriscoll,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-27 18:15:34

is.element() sprawia, że kod jest bardziej czytelny i jest identyczny z %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
 147
Author: Justin Nafe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-02 12:03:47

Funkcja any() tworzy czytelny kod

> 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
 61
Author: Dan Goldstein,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-20 22:12:04

Możesz użyć operatora %in%:

vec <- c(1, 2, 3, 4, 5)
1 %in% vec # true
10 %in% vec # false
 32
Author: ars,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-23 02:25:52

Pogrupuję opcje na podstawie wyjścia. Załóżmy następujący wektor dla wszystkich przykładów.

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

do sprawdzania obecności:

%w%

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

Dowolne()

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

Jest.element()

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

za znalezienie pierwszego occurance:

Mecz()

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

do znalezienia wszystkich wystąpień jako wektor indeksy:

Które()

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

do znajdowania wszystkich wystąpień jako wektor logiczny:

==

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

Edytuj: Usunięcie grep () i grepl () z listy z przyczyn wymienionych w komentarzach

 31
Author: ishandutta2007,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-18 02:54:05

Również do znalezienia pozycji elementu "który" może być użyty jako

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

which(pop==13)

I aby znaleźć elementy, które nie są zawarte w wektorze docelowym, można to zrobić:

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

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

pop[which(!(pop%in%Tset))]
 17
Author: Armin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-18 02:06:25

Bardzo lubię grep () i grepl () do tego celu.

Grep () zwraca wektor liczb całkowitych, które wskazują, gdzie są dopasowania.

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

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

Grepl () zwraca wektor logiczny z "TRUE" w miejscu dopasowania.

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

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

Te funkcje uwzględniają wielkość liter.

 10
Author: ojdajuiceman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-03 01:02:53