Slovník | Vyhledávání | Mapa webu
 
Základy informatiky pro biologyAnalýza dat v R Úprava a transformace dat v R Příklady k procvičení

Logo Matematická biologie

Příklady k procvičení

Pro cvičení si načtěte soubor tabulek state, který obsahuje údaje 50 států USA.

> data(state)

Vytvoříme datovou tabulku, která bude obsahovat matici state.x77 a údaje o divizi a regionu do kterého stát patří.

> state.fin <- data.frame(state.x77, state=row.names(state.x77), region=state.region, division = state.division, row.names=1:50)

1. Přidejte do tabulky state.fin novou proměnnou, která bude kategorizovat rozlohu států na dvě skupiny (Area) podle průměrné rozlohy (menší nebo rovný průměr a větší než průměr) a nazvěte ji Area.cat.

Řešení

> state.fin$Area.cat<-state.fin$Area>mean(state.fin$Area)

2. Rekódujte ve stejné tabulce proměnnou Income (průměrný příjem v dolarech) na skupiny <4000, 4000-5000,> 5000.

Řešení

> state.fin$Income<-recode(state.fin$Income, "lo:4000='<4000'; 5000:hi='>5000'; else='4000-5000'")
> head(state.fin)

  Population    Income Illiteracy Life.Exp Murder HS.Grad Frost   Area      state region
1       3615     <4000        2.1    69.05   15.1    41.3    20  50708    Alabama  South
2        365     >5000        1.5    69.31   11.3    66.7   152 566432     Alaska   West
3       2212 4000-5000        1.8    70.55    7.8    58.1    15 113417    Arizona   West
4       2110     <4000        1.9    70.66   10.1    39.9    65  51945   Arkansas  South
5      21198     >5000        1.1    71.71   10.3    62.6    20 156361 California   West
6       2541 4000-5000        0.7    72.06    6.8    63.9   166 103766   Colorado   West
            division Area.cat
1 East South Central    FALSE
2            Pacific     TRUE
3           Mountain     TRUE
4 West South Central    FALSE
5            Pacific     TRUE
6           Mountain     TRUE

3. Seřaďte řádky tabulky state.fin na základě populace (proměnná Population) od největší po nejmenší.

Řešení

[

> state.fin[order(state.fin[,"Population"], decreasing=TRUE),]

]

4. U funkce merge()zjistěte funkci argumentů by=, by.x= a by.y=.

Řešení

[

Použijeme nápovědu k funkci:

> ?merge

Argumenty by=, by.x= a by.y= se dá specifikovat název sloupce, podle kterého se mají dva soubory spojit v obou (by=) nebo každém souboru zvlášť (by.x= a by.y=).

]

5. V divizích Pacific a Mountain zjistěte počty států, které mají negramotnost (Illiteracy) větší jako průměr USA.

Řešení

[

Způsobů řešení je více. Můžeme například nejdříve vytvořit novou kategorickou proměnnou, která rozdělí negramotnost na větší, nebo menší nebo rovno jako průměr. Použijeme k tomu znalosti z kapitoly Přidávání, odstraňování a transformace a rekódování proměnných:

> state.fin<-transform(state.fin, Illiteracy.kat=Illiteracy>mean(Illiteracy))

Nová proměnná je logický vektor, který obsahuje hodnoty TRUE v případě, že je negramotnost větší než průměr USA. Aplikujeme-li součet přes divize, získáme odpověď na otázku. Použijeme funkci aggregate() a vypočteme součet kategorií u všech divizí (viz kapitola Agregace:

> aggregate(x=state.fin$Illiteracy.kat, by=list(state.fin$division), FUN=sum)
             Group.1 x
1        New England 1
2    Middle Atlantic 1
3     South Atlantic 6
4 East South Central 4
5 West South Central 3
6 East North Central 0
7 West North Central 0
8           Mountain 2
9            Pacific 2

Divize Pacific a Mountain mají po dvouch státech s negramotností vyšší než je průměr USA.

]

6. Připojte k jednotlivým státům souboru state.fin data o násilných trestných činech z datové tabulky USArrests (data(USArrests)) na základě jmen států. Výsledný soubor musí mít na konci stejný počet řádků jako tabulka state.fin.

Řešení

[

Využijeme funkci merge() a určíme v každém ze souborů sloupec, který obsahuje jména států. U tabulky USArrests jsou jména států ve sloupcích řádků, proto do argumentu by.y= zadáme hodnotu "row.names":

> state.arrests <- merge(x = state.fin,y=USArrests, all=TRUE, by.x="state", by.y="row.names")
> head(state.arrests)
       state Population Income Illiteracy Life.Exp Murder.x HS.Grad Frost   Area region
1    Alabama       3615   3624        2.1    69.05     15.1    41.3    20  50708  South
2     Alaska        365   6315        1.5    69.31     11.3    66.7   152 566432   West
3    Arizona       2212   4530        1.8    70.55      7.8    58.1    15 113417   West
4   Arkansas       2110   3378        1.9    70.66     10.1    39.9    65  51945  South
5 California      21198   5114        1.1    71.71     10.3    62.6    20 156361   West
6   Colorado       2541   4884        0.7    72.06      6.8    63.9   166 103766   West
            division Illiteracy.kat Murder.y Assault UrbanPop Rape
1 East South Central           TRUE     13.2     236       58 21.2
2            Pacific           TRUE     10.0     263       48 44.5
3           Mountain           TRUE      8.1     294       80 31.0
4 West South Central           TRUE      8.8     190       50 19.5
5            Pacific          FALSE      9.0     276       91 40.6
6           Mountain          FALSE      7.9     204       78 38.7

]

7.  Z tabulky state.fin vytvořte tabulku region.summary o dvou sloupcích, ve které bude každý region reprezentován průměrnou rozlohou (Area) ze všech svých států.

Řešení

[

Znovu použijeme jednoduše funkci aggregate():

> region.summary <- aggregate(x=state.fin$Area, by=list(state.fin$region), FUN=mean)
> region.summary

        Group.1         x
1     Northeast  18141.00
2         South  54605.12
3 North Central  62652.00
4          West 134463.00

]

8. Z tabulky state.fin vypočítejte pomocí funkce cast() maxima pouze proměnných Population a Life.Exp uvnitř států.

Řešení

[

Nejdříve s pomocí funkce melt()vytvoříme dlouhý soubor. Pomocí argumentu measure.vars= definujeme jako proměnné pouze Population a Life.Exp:

> state.fin.melted<-melt(state.fin, measure.vars=c("Population","Life.Exp")
Using state, region, division as id variables
> head(state.fin.melted)

  Income Illiteracy Murder HS.Grad Frost   Area      state region
1   3624        2.1   15.1    41.3    20  50708    Alabama  South
2   6315        1.5   11.3    66.7   152 566432     Alaska   West
3   4530        1.8    7.8    58.1    15 113417    Arizona   West
4   3378        1.9   10.1    39.9    65  51945   Arkansas  South
5   5114        1.1   10.3    62.6    20 156361 California   West
6   4884        0.7    6.8    63.9   166 103766   Colorado   West
            division Illiteracy.kat   variable value
1 East South Central           TRUE Population  3615
2            Pacific           TRUE Population   365
3           Mountain           TRUE Population  2212
4 West South Central           TRUE Population  2110
5            Pacific          FALSE Population 21198
6           Mountain          FALSE Population  2541

Pak s pomocí funkce cast() provedeme agregaci:

> popul.lifeexp.max <- cast(state.fin.melted, formula = state~variable, fun.aggregate = max)
> head(popul.lifeexp.max)

       state Population Life.Exp
1    Alabama       3615    69.05
2     Alaska        365    69.31
3    Arizona       2212    70.55
4   Arkansas       2110    70.66
5 California      21198    71.71
6   Colorado       2541    72.06

]

 

9. Který argument funkce addmargins() kontroluje dimenzi v níž se mají spočítat součty? Je možné definovat i jinou funkci než je frekvence?

Řešení

[

Je to argument margin= . Jinou funkci je možné definovat a to s pomocí argumentu FUN=.

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