Znajdowanie wszystkich pozycji dla wielu elementów w wektorze
Załóżmy, że mam następujący wektor:
x <- c(8, 6, 9, 9, 7, 3, 2, 5, 5, 1, 6, 8, 5, 2, 9, 3, 5, 10, 8, 2)
Jak mogę znaleźć, które elementy są albo 8 lub 9?
5 answers
To jest jeden sposób, aby to zrobić. Najpierw dostaję indeksy, przy których x jest albo 8, albo 9. Następnie możemy zweryfikować, że przy tych indeksach X jest rzeczywiście 8 i 9.
> inds <- which(x %in% c(8,9))
> inds
[1] 1 3 4 12 15 19
> x[inds]
[1] 8 9 9 8 9 8
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 03:13:38
Możesz wypróbować operator |
na krótkie Warunki
which(x == 8 | x == 9)
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
2016-04-09 20:27:02
W ten szczególny przypadek możesz również użyć grep
:
# option 1
grep('[89]',x)
# option 2
grep('8|9',x)
Które dają:
[1] 1 3 4 12 15 19
Jeśli chcesz również wykryć liczbę z więcej niż jedną cyfrą, preferowana jest druga opcja:
> grep('10|8',x)
[1] 1 12 18 19
Jednak położyłem nacisk na ten szczególny przypadek na początku mojej odpowiedzi nie bez powodu. jak wspomniał @DavidArenburg , może to prowadzić do niezamierzonych rezultatów. Użycie na przykład grep('1|8',x)
wykryje zarówno 1
, jak i 10
:
> grep('1|8',x)
[1] 1 10 12 18 19
Aby uniknąć tego efektu ubocznego, musisz zawinąć liczby, które mają być wykryte w Word-bounderies:
> grep('\\b1\\b|8',x)
[1] 1 10 12 19
Teraz, 10
nie jest wykryty.
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
2018-08-17 10:04:28
Alternatywnie, jeśli nie musisz używać indeksów, ale tylko elementów, które możesz zrobić
> x <- sample(1:10,20,replace=TRUE)
> x
[1] 6 4 7 2 9 3 3 5 4 7 2 1 4 9 1 6 10 4 3 10
> x[8<=x & x<=9]
[1] 9 9
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 07:34:45
grepl
może przydatna funkcja. Zauważ, że grepl
pojawia się w wersjach R 2.9.0 i późniejszych. Przydatne w grepl
jest to, że zwraca wektor logiczny o tej samej długości co x
.
grepl(8, x)
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[13] FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
grepl(9, x)
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
[13] FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE
Aby uzyskać odpowiedź, możesz wykonać następujące czynności]}
grepl(8,x) | grepl(9,x)
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-05-15 14:16:52