R-ohjelmointi.org

Tilastotieteellistä ohjelmointia R-kielellä

Monta eri tapaa laskea keskiarvo ryhmän mukaan

Wensui esitteli, että miten eri tavoin R:ssä voi laskea keskiarvot tietyn ryhmämuuttujan mukaan. Otin vapauden lainata hänen kirjoittamaansa koodia ja laajentaa esimerkkiä muutamalla pätkällä. Ohessa siis kaikki skriptit tuottavat saman lopputuloksen:

#     Species Sepal.Length Sepal.Width Petal.Length Petal.Width
#1     setosa        5.006       3.428        1.462       0.246
#2 versicolor        5.936       2.770        4.260       1.326
#3  virginica        6.588       2.974        5.552       2.026

Tässä skriptit:

data(iris)
 
### WITH AGGREGATE() FUNCTION ###
sum1 <- aggregate(iris[-5], iris[5], mean)
sum1
 
### WITH BY() FUNCTION ###
tmp2 <- by(iris[-5], iris[5], mean)
sum2 <- cbind(expand.grid(dimnames(tmp2)), do.call(rbind, tmp2))
rownames(sum2) <- NULL
sum2
 
### WITH LAPPLY() FUNCTION ###
tmp3 <- lapply(split(iris[-5], iris[5]), mean)
sum3 <- data.frame(Species = names(tmp3), do.call(rbind, tmp3))
rownames(sum3) <- NULL
sum3
 
### WITH RESHAPE PACKAGE ###
#install.packages("reshape")
library(reshape)
tmp4 <- melt(iris)
sum4 <- cast(tmp4, Species ~ variable, mean)
sum4
 
### WITH SQLDF PACKAGE ###
#install.packages("sqldf")
library(sqldf)
sum5 <- sqldf("select
                 Species,
                 avg(Sepal_Length) as Sepal_Length,
                 avg(Sepal_Width)  as Sepal_Width,
                 avg(Petal_Length) as Petal_Length,
                 avg(Petal_Width)  as Petal_Width
               from
                 iris group by Species");
sum5
 
### WITH DOBY PACKAGE
#install.packages("doBy")
library(doBy)
sum6 <- summaryBy(Sepal.Length + Sepal.Width + Petal.Length + 
Petal.Width ~ Species, data=iris, FUN=mean)
sum6
 
## WITH PLYR PACKAGE
#install.packages("plyr")
library(plyr)
sum7 <- ddply(iris, .(Species), numcolwise(mean))
sum7

2 Responses to “Monta eri tapaa laskea keskiarvo ryhmän mukaan”

  • Juha Haataja kirjoitti:

    Kiitokset, törmäsin blogiin vasta äskettäin mutta kiinnostus R:n mahdollisuuksiin heräsi oitis.

    Juttelin jokin aika sitten ammattikorkeakoulujen tarpeesta rationalisoida tilasto-ohjelmistojen käyttökuluja, ilmeisesti rahaa kuluu melko lailla lisensseihin.

    Miten helppona näkisit R:n tuomisen SASin ja/tai Splussan tilalle ko. opetuskäytössä – erityisesti suomenkielisen selkeän opetusmateriaalin puute voi olla kynnyskysymys.

  • Lauri Nikkinen kirjoitti:

    Tiedän, että useat organisaatiot ovat tällä hetkellä hakemassa säästöjä mm. analytiikkaohjelmiinsa. SASin lisenssi on todella kallis, ja muutamissa oppilaitoksissa R on otettu SASin tilalle juuri tästä syystä.

    Opetusmateriaaleja on jonkin verran myös suomen kielellä, mutta eittämättä niitä voisi olla enemmänkin. Näksisin, että se voi olla yksi este, mutta ei välttämättä kovin iso. R:n komentorivikäyttö voi nostaa oppimiskynnystä, mutta GUI on myös olemassa: R Commander http://socserv.mcmaster.ca/jfox/Misc/Rcmdr/

    Mielestäni kannattaa ehdottamasti alkaa virittelemään R:n käyttöä vaikkapa SASin rinnalle, ja koittaa jollain aikavälillä luopua kalliista lisensseistä. Monet pelkäävät virallisen supportin puutetta open source-puolella mutta tähän voisi vastata yhdellä sanalla: linux.


Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *