Brz početak rada sa R: aggregate() komanda (10. Deo)

U 10. Delu, prodiskutovaćemo aggregate() komandu za kreiranje sumarne tabele u R. Na osnovu kompleksne datoteke koja uključuje kvalitativne promenljive na nekoliko nivoa želimo kreirati sumarnu tabelu za svaki nivo kvalitativne promenljive. Na primer, naša datoteka može uključivati promenljivu Pol, kvalitativne promenljiva sa dva nivoa, Muško i Žensko. Naša datoteka može uključivati druge kvalitativne promenljive kao što su Etnička Pripadnost, Boja Kose, Tretman koji je primenjen na pacijentu u medicinskoj studiji. U svakom slučaju, zadatak nam može biti izračunavanje sumarnih statistika za svaki nivo kvalitativne promenljive. Upravo to je situacija u kojoj nam aggregate() komanda može pomoći.

Ovde imamo datoteku pacijenata koji su podvrgnuti medicinskoj terapiji (A, B ili C). Raspolažemo podacima o njihovom polu, masi tela u kg, da li vežbaju, da li puše i da li su se oporavili posle tretmana. Kopirajte i zalepite sledeću datoteku u R.

pacijenti <- structure(list(POL = structure(c(2L, 2L, 1L, 1L, 1L, 2L, 2L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 1L), .Label = c("Ž", "M"), class = "factor"), TERAPIJA = structure(c(1L, 1L, 2L, 1L, 2L, 2L, 3L, 2L, 1L, 1L, 2L, 2L, 2L, 1L, 3L, 2L, 2L, 1L, 3L, 1L, 1L, 2L, 3L, 2L, 2L, 2L, 3L), .Label = c("A", "B", "C"), class = "factor"), MASA = c(79L, 87L, 65L, 58L, 72L, 95L, 76L, 56L, 77L, 104L, 67L, 82L, 59L, 68L, 79L, 125L, 83L, 63L, 57L, 84L, 72L, 68L, 65L, 64L, 87L, 92L, 56L), PUSENJE = structure(c(2L, 2L, 1L, 2L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 1L, 2L), .Label = c("N", "D"), class = "factor"), VEZBA = structure(c(2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 2L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 2L, 1L), .Label = c("N", "D"), class = "factor"), OPORAVAK = structure(c(2L, 2L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L), .Label = c("N", "D"), class = "factor")), .Names = c("POL", "TERAPIJA", "MASA", "PUSENJE", "VEZBA", "OPORAVAK"), class = "data.frame", row.names = c(NA, -27L))
attach(pacijenti)
pacijenti

Sada ćemo da koristimo aggregate() komandu da bismo kreirali tabelu sa srednjim vrednostima mase tela za dva nivoa promenljive pol. Uočiti koju sintaksu koristimo pri tome. Neprekidna promenljiva postaje prvi argument ove funkcije. Potom kvalitatvna promenljiva se javlja unutar list() komande. Napokon, funkcija koju želimo primeniti (u ovom slučaju želimo srednju vrednost, tj. mean) postaje trećim argumentom.

Tabela1 <- aggregate(MASA, list(POL), FUN=mean)
Tabela1

Uočiti da nam aggregate() komanda ne vraća imena promenljivih. Sada ćemo koristiti aggregate() komandu da bismo dobili tabelu mase tela za dva nivoa pušača, tj. ljudi koji puše i oni koji ne puše.

Tabela2 <- aggregate(MASA, list(PUSENJE), FUN=mean)
Tabela2

aggregate() komanda nam omogućava kreiranje kompleksnijih tabela, za nivoe nekoliko kvalitativnih promenljivih istovremeno.

Tabela3 <- aggregate(MASA, list(POL, TERAPIJA), FUN=mean)
Tabela3

Naposletku, kreirajmo tabelu sa maksimalnom masom tela za nivoe pola, pušenja i terapije.

Tabela4 <- aggregate(MASA, list(POL, PUSENJE, TERAPIJA), FUN=max)
Tabela4

Ovo i nije bilo tako teško! 🙂 U blogu 11 razmotrićemo druge tehnike u R.

Vidimo se uskoro!

David

Dodatak: Korišćeni R kodovi

# Kreirati i prikazati sledeću datoteku. 
pacijenti <- structure(list(POL = structure(c(2L, 2L, 1L, 1L, 1L, 2L, 2L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 1L), .Label = c("Ž", "M"), class = "factor"), TERAPIJA = structure(c(1L, 1L, 2L, 1L, 2L, 2L, 3L, 2L, 1L, 1L, 2L, 2L, 2L, 1L, 3L, 2L, 2L, 1L, 3L, 1L, 1L, 2L, 3L, 2L, 2L, 2L, 3L), .Label = c("A", "B", "C"), class = "factor"), MASA = c(79L, 87L, 65L, 58L, 72L, 95L, 76L, 56L, 77L, 104L, 67L, 82L, 59L, 68L, 79L, 125L, 83L, 63L, 57L, 84L, 72L, 68L, 65L, 64L, 87L, 92L, 56L), PUSENJE = structure(c(2L, 2L, 1L, 2L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 1L, 2L), .Label = c("N", "D"), class = "factor"), VEZBA = structure(c(2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 2L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 2L, 1L), .Label = c("N", "D"), class = "factor"), OPORAVAK = structure(c(2L, 2L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L), .Label = c("N", "D"), class = "factor")), .Names = c("POL", "TERAPIJA", "MASA", "PUSENJE", "VEZBA", "OPORAVAK"), class = "data.frame", row.names = c(NA, -27L))
attach(pacijenti)
pacijenti

# Kreirati tabelu srednjih vrednosti mase tela za dva nivoa promenljive pola. 
Tabela1 <- aggregate(MASA, list(POL), FUN=mean)
Tabela1

# Kreirati tabelu srednjih vrednosti mase tela za dva nivoa promenljive pušenje. 
Tabela2 <- aggregate(MASA, list(PUSENJE), FUN=mean)
Tabela2

# Kreirati tabelu srednje vrednosti mase tela za dva nivoa promenljive pol i tri nivoa promenljive terapija.
Tabela3 <- aggregate(MASA, list(POL, TERAPIJA), FUN=mean)
Tabela3

# Kreirati tabelu maksimalne vrednosti mase tela za nivoe promenljivih pol, pušenje i terapija.
Tabela4 <- aggregate(MASA, list(POL, PUSENJE, TERAPIJA), FUN=max)
Tabela4