Pod tabulkou (data.frame) myslíme více sloupců (vektorů), všechny mají stejný počet řádků. Data.frame nejčastěji načteme ze souboru a následně data zpracujeme :-)
# načtení obyčejného textového souboru, první řádek je hlavička tabulky (názvy sloupců)
# hodnoty jsou odděleny mezerou - např. import tabulky z Praatu
data <- read.table("soubor.txt", header = TRUE, sep = " ")
# to samé, ale desetinná čísla jsou v českém formátu (desetinná čárka)
data <- read.table("soubor.txt", header = TRUE, sep = " ", dec = ",")
# načtení dat z Excelu
library(readxl) # pokud není knihovna nainstalována, tak nejdříve zavolat: install.packages("readxl")
# prvotní instalace vyžaduje internet
read_excel("soubor.xlsx", sheet = 1, col_names = TRUE) # 1. sešit souboru, tabulka s hlavičkou
R má předdefinované interní ukázkové data.frame, např. airquality, sleep, anscombe či InsectSprays (více viz http://stat.ethz.ch/R-manual/R-devel/library/datasets/html/00Index.html)
Pojďme si pohrát s InsectSprays obsahujícím počty hmyzu v závislosti na typu postřiku.
data <- InsectSprays
head(data) # prvních 6 řádků data.frame
## count spray
## 1 10 A
## 2 7 A
## 3 20 A
## 4 14 A
## 5 14 A
## 6 12 A
tail(data) # posledních 6 řádků
## count spray
## 67 13 F
## 68 10 F
## 69 26 F
## 70 26 F
## 71 24 F
## 72 13 F
summary(data) # souhrnné statistiky pro každý sloupec (u numerických kvantily, u faktorových počty)
## count spray
## Min. : 0.00 A:12
## 1st Qu.: 3.00 B:12
## Median : 7.00 C:12
## Mean : 9.50 D:12
## 3rd Qu.:14.25 E:12
## Max. :26.00 F:12
str(data) # počet řádků, typy sloupců a ukázka prvních hodnot
## 'data.frame': 72 obs. of 2 variables:
## $ count: num 10 7 20 14 14 12 10 23 17 20 ...
## $ spray: Factor w/ 6 levels "A","B","C","D",..: 1 1 1 1 1 1 1 1 1 1 ...
nrow(data) # počet řádků
## [1] 72
dim(data) # počet řádků a sloupců
## [1] 72 2
names(data) # zjištění názvů sloupců
## [1] "count" "spray"
names(data) <- c("count", "spray") # názvy sloupců si můžeme pojmenovat podle sebe
# - užitečné, když tabulka nemá hlavičku
Tip: přehledné zobrazení data.frame
Vpravo nahoře v okénku Environment ťukněte na název data.frame (v našem případě data), tím se automaticky vyvolá příkaz View(data) a otevře se záložka s velice pěkným náhledem data.frame.
Pozor! Pokud však provedete v data.frame nějaké úpravy, zobrazení tabulky se samo neaktualizuje. Je nutné znovu klepnout na název data.frame v okénku Environment.
data$count # odkaz na sloupec (vektor) dle názvu
## [1] 10 7 20 14 14 12 10 23 17 20 14 13 11 17 21 11 16 14 17 17 19 21 7
## [24] 13 0 1 7 2 3 1 2 1 3 0 1 4 3 5 12 6 4 3 5 5 5 5
## [47] 2 4 3 5 3 5 3 6 1 1 3 2 6 4 11 9 15 22 15 16 13 10 26
## [70] 26 24 13
data$spray # napovídání: stačí napsat data$ a automaticky vyskakuje seznam sloupců
## [1] A A A A A A A A A A A A B B B B B B B B B B B B C C C C C C C C C C C
## [36] C D D D D D D D D D D D D E E E E E E E E E E E E F F F F F F F F F F
## [71] F F
## Levels: A B C D E F
mean(data$count) # výpočty se sloupcem
## [1] 9.5
# Odkaz na sloupec podle indexu: všechny řádky, 1. sloupec.
# Pokud to však jde, bylo by přehlednější odkazovat názvem (tedy data$count).
data[, 1]
## [1] 10 7 20 14 14 12 10 23 17 20 14 13 11 17 21 11 16 14 17 17 19 21 7
## [24] 13 0 1 7 2 3 1 2 1 3 0 1 4 3 5 12 6 4 3 5 5 5 5
## [47] 2 4 3 5 3 5 3 6 1 1 3 2 6 4 11 9 15 22 15 16 13 10 26
## [70] 26 24 13
data[, 2] # všechny řádky, 2. sloupec
## [1] A A A A A A A A A A A A B B B B B B B B B B B B C C C C C C C C C C C
## [36] C D D D D D D D D D D D D E E E E E E E E E E E E F F F F F F F F F F
## [71] F F
## Levels: A B C D E F
data[1:5, ] # výřez - prvních pět řádků, všechny sloupce
## count spray
## 1 10 A
## 2 7 A
## 3 20 A
## 4 14 A
## 5 14 A
data[1:5, 1] # prvních pět řádků, 1. sloupec
## [1] 10 7 20 14 14
data$count[1:5] # totéž, ale přehledněji: prvních 5 hodnot sloupce count
## [1] 10 7 20 14 14
# histogram celého sloupce count
hist(data$count)
# histogram hodnot count jen pro část dat, kde spray je A
vyber <- subset(data, spray == "A")
hist(vyber$count)
# krabicový graf count rozdělený na skupiny dle faktoru spray
boxplot(count ~ spray, data = data)
# a hezké popisky
boxplot(count ~ spray, data = data, xlab = "Typ postřiku", ylab = "Počet hmyzu",
main = "Srovnání postřiků", col = "lightblue")
Poznámka: seznam předdefinovaných názvů barev obdržíme funkcí colors().
Funkce pro krabicové grafy umí rozdělit skupiny i podle kombinace hodnot kategorií více proměnných.
Např. data.frame ToothGrowth porovnává velikost zubů pokusných zvířat (sloupec len) v několika skupinách. Třem skupinám byl podáván vitamin C v kyselině askorbové (VC ve sloupci supp) v dávkách 0.5, 1.0 a 2.0 mg (sloupec dose), zatímco jiným třem skupinám byl podáván vitamin C v pomerančovém džusu (OJ ve sloupci supp), opět v různých dávkách.
Porovnání rozdělení délky zubů (len) podle skupin vytvořených kombinacemi hodnot obou proměnných (supp, dose) v data.frame ToothGrowth můžeme učinit jednoduše pomocí následujícího zápisu funkce boxplot().
boxplot(len ~ supp*dose, ToothGrowth)
Data.frame si můžeme sami vytvořit přímo v R slepením jednotlivých vektorů.
mojeData <- data.frame(cisloID = 1:5, druhySloupec = c("muž", "žena", "muž", "muž", "žena"))
print(mojeData)
## cisloID druhySloupec
## 1 1 muž
## 2 2 žena
## 3 3 muž
## 4 4 muž
## 5 5 žena
Jednoduchý textový formát.
write.table(mojeData, "souborVystup.txt", sep = " ", row.names = FALSE) # jako oddělovač volím mezeru
Excel – co si budeme povídat, pro většinu lidí je to pořád ten nejdostupnější formát.
library(openxlsx) # pokud není knihovna nainstalována, tak nejdříve zavolat: install.packages("openxlsx")
write.xlsx(mojeData, "souborVystup.xlsx", sheetName = "První záložka", row.names = FALSE)
© 6. 3. 2015 Tomáš Bořil, borilt@gmail.com