Práce s logickým vektorem
Logický vektor je vektor logických hodnot TRUE nebo FALSE. R umožňuje používat pouze T nebo F.
a = c(TRUE,FALSE,TRUE)
Logický vektor je také výsledkem aplikace srovnávacích operátorů na jiné vektory (==, !=, >, <, >=, <=, |):
> e = c(1,2,3) == 3
> e
[1] FALSE FALSE TRUE
> is(e)
[1] "logical" "vector"
V numerických operacích R interpretuje logický vektor jako vektor čísel 0 (FALSE) a 1 (TRUE), je tedy možné s ním zacházet přímo jako s vektorem numerickým:
> e+2
[1] 2 2 3
Chceme-li, aby logický vektor byl interpretován jako vektor řetězců, můžeme použít funkci:
> as.character(e)
[1] "FALSE" "FALSE" "TRUE"
Logický vektor je skvělý nástroj pro indexování (filtrování) datových struktur. Ukážeme si na datovém souboru Orange (dostupný v základní instalaci R) - která obsahuje 35 řádků a 3 sloupce se záznamy růstu pomerančovníků v čase: číslo stromu, věk stromu a obvod kmene.
> head(Orange)
Tree age circumference
1 1 118 30
2 1 484 58
3 1 664 87
4 1 1004 115
5 1 1231 120
6 1 1372 142
Chceme-li vyfiltrovat pouze údaje stromů nad tisíc let, můžeme použít logický vektor vytvořen použitím srovnávacího operátoru >:
Podrobněji:
> Orange$age # tento příkaz vrací sloupec s věkem jako vektor
[1] 118 484 664 1004 1231 1372 1582 118 484 664 1004 1231 1372 1582 118 484 664 1004
[19] 1231 1372 1582 118 484 664 1004 1231 1372 1582 118 484 664 1004 1231 1372 1582
> Orange$age > 1000 #srovnání vektoru věku s hodnotou 1000 vrací logický vektor s hodnotami TRUE/FALSE
[1] FALSE FALSE FALSE TRUE TRUE TRUE TRUE FALSE FALSE FALSE TRUE TRUE TRUE TRUE FALSE
[16] FALSE FALSE TRUE TRUE TRUE TRUE FALSE FALSE FALSE TRUE TRUE TRUE TRUE FALSE FALSE
[31] FALSE TRUE TRUE TRUE TRUE
Tento logický vektor můžeme použít pro výběr řádků datové tabulky (vyberou se pouze řádky, jejichž hodnota ve vektoru je TRUE)
> Orange[Orange$age>1000,]
Tree age circumference
4 1 1004 115
5 1 1231 120
6 1 1372 142
7 1 1582 145
11 2 1004 156
12 2 1231 172
13 2 1372 203
14 2 1582 203
18 3 1004 108
19 3 1231 115
20 3 1372 139
21 3 1582 140
25 4 1004 167
26 4 1231 179
27 4 1372 209
28 4 1582 214
32 5 1004 125
33 5 1231 142
34 5 1372 174
35 5 1582 177
Úlohy k procvičení
1. Sjednoťte vektory a, e do proměnné g. Co se stane?