Slovník | Vyhledávání | Mapa webu
 
Základy informatiky pro biologyAnalýza dat v R Datové struktury Vektory Práce s vektorem znakových řetězců

Logo Matematická biologie

Práce s vektorem znakových řetězců

Znalost práce s vektory řetězců

Vektor znakových rětězců je vektor typu "character" - tedy jeho jednotlivé prvky jsou řetězce znaků (syn. text, textový řetězec). Řetězec znaků je také vektorem o délce 1.

> p <- "Muj oblibeny napoj je pivo" # řetězec znaků (vektor o délce 1)
> r <- c ("Muj", "oblibeny", "napoj", "je", "vino") # vektor znakových řetězců (o délce 5
)

Počet znaků řetězce se dá zjistit funkcí nchar(), která je podobně jako jiné funkce v R vektorizována (aplikuje se tedy na všechny prvky vektoru):

> nchar(p)
[1] 26
> nchar(r)
[1] 3 8 5 2 4

Chceme-li vyměnit část znaků v samotném textovém řetězci, aplikujeme funkci sub(). Nahraďme v textovém řetězci p slovo "pivo" slovem "voda".

> sub("pivo", "voda", p)
[1] "Muj oblibeny napoj je voda"

Chceme-li spojit několik textových řetězců do jednoho, použijeme funkci paste(). Do této funkce můžeme každý řetězec zadat jako samostatný parametr:

> paste("Muj", "oblibeny", "napoj", "je", "vino", collapse = "")
[1] "Muj oblibeny napoj je vino"

nebo můžeme zadat vektor textových řetězců

> paste(r, collapse = "")
[1] "Muj oblibeny napoj je vino"

 

Vytvořme si další textový řetězec:

> p2 <- c("Muj;oblibeny;napoj;je;pivo" )

Pro rozdělení textového řetězce na vektor jednotlivých prvků použijeme vektorizovanou funkci strsplit(), kde parametr split= určuje znak řetězce, který slouží jako oddělovač. Mezera je také znak:

> strsplit(p, split=' ')
[[1]]
[1] "Muj"      "oblibeny" "napoj"    "je"       "pivo"    

 

V textovém řetězci p2 odděluje jednotlivá slova středník

> strsplit(p2, split=";")
[[1]]
[1] "Muj"      "oblibeny" "napoj"    "je"       "pivo"   

Použijeme-li jako oddělovač pouze apostrofy bez mezery, řetězec bude rozdělen na vektor jednotlivých znaků:

> strsplit(p, split='')
[[1]]
 [1] "M" "u" "j" " " "o" "b" "l" "i" "b" "e" "n" "y" " " "n" "a" "p" "o" "j" " " "j" "e" " " "p"
[24] "i" "v" "o"

Vektorizovaná funkce substring() vrací část řetězce

> substring(p, first=1,last=2)
[1] "Mu"

Vyhledávání ve znakovém řetězci s použitím regexpr() funkce, která vrátí první pozici hledaného řetězce a jeho délku, přičemž -1 znamená, že daný řetězec se nenašel. V případě, že se hledaný řetězec vyskytuje v řetězci více než jednou, funkce vrátí pouze první pozici.

> regexpr ("oblibeny", p)
[1] 5
attr(,"match.length")
[1] 8
attr(,"useBytes")
[1] TRUE

 

> regexpr ("j", p)
[1] 3
attr(,"match.length")
[1] 1
attr(,"useBytes")
[1] TRUE


> regexpr ("oj", r)
[1] -1 -1  4 -1 -1
attr(,"match.length")
[1] -1 -1  2 -1 -1
attr(,"useBytes")
[1] TRUE

 

Úlohy k procvičení

> s = c("8 jablek" , "10 hrusek" )

1. Spojte objekty vektoru řetězců znaků q tak aby byly slova oddělená znakem /

 
2. Zjistěte typ objektu který je výstupem funkce strsplit:
> strsplit(r, '')

3. Vytvořte z vektorů p, s a r vektor v = c ("pivo", "vino", "jablek", "hrušek")

 
4. Najděte další vyhledávací funkce řetězce (nápověda: použijte nápovědu k funkci regexpr)

 

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