Slovník | Vyhledávání | Mapa webu
 
Základy informatiky pro biologyAnalýza dat v R Datové struktury Vektory Práce s logickým vektorem

Logo Matematická biologie

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?
 

 
vytvořil Institut biostatistiky a analýz Lékařské fakulty Masarykovy univerzity