Seite 1 von 1

Aggregieren und Mittelwerte bilden

Verfasst: Mi Dez 14, 2016 9:42 pm
von FridaKoriander
Hallo zusammen!

Ich hoffe, mir kann jemand helfen, bin absolute R-Anfängerin und werte Daten für meine Masterarbeit aus.

Ich würde gerne Mittelwerte berechen und zwar unterteilt nach den Variablen "task" und "transition". Im Anhang ein Ausschnitt meines Datensets.

Ich benötige die Mittelwerte der Variablen zr, a, v, t0, st0 und p gruppiert nach task (hier gibt es die Ausprägungen digit, context, letter) und transition (ABA, CBA, CAA).

Daraus soll dann wieder eine eigene Tabelle entstehen.

Kann mir jemand weiterhelfen? Vielen Dank schon mal!!

Re: Aggregieren und Mittelwerte bilden

Verfasst: Mi Dez 14, 2016 10:00 pm
von EDi
Hier hatte ich mal die vielen Möglichkeiten die R bietet aufgeschrieben. Anstatt max einfach mean einsetzen.

Edit: Hier mal hinkopiert (für google...)

Code: Alles auswählen

  df <- read.table(header = TRUE, text = 'Gene   Value
    A      12
    A      10
    B      3
    B      5
    B      6
    C      1
    D      3
    D      4')
    
    # aggregate
    aggregate(df$Value, by = list(df$Gene), max)
    aggregate(Value ~ Gene, data = df, max)
    
    # tapply
    tapply(df$Value, df$Gene, max)

    # split + lapply
    lapply(split(df, df$Gene), function(y) max(y$Value))
    
    # plyr
    require(plyr)
    ddply(df, .(Gene), summarise, Value = max(Value))
    
    # dplyr
    require(dplyr)
    df %>% group_by(Gene) %>% summarise(Value = max(Value))
    
    # data.table
    require(data.table)
    dt <- data.table(df)
    dt[ , max(Value), by = Gene]
    
    # doBy
    require(doBy)
    summaryBy(Value~Gene, data = df, FUN = max)

    # sqldf
    require(sqldf)
    sqldf("select Gene, max(Value) as Value from df group by Gene", drv = 'SQLite')

    # ave
    df[as.logical(ave(df$Value, df$Gene, FUN = function(x) x == max(x))),]

Re: Aggregieren und Mittelwerte bilden

Verfasst: Do Dez 15, 2016 8:10 am
von bigben
Hallo!
FridaKoriander hat geschrieben:Im Anhang ein Ausschnitt meines Datensets.
Einen Anhang sehe ich nicht, aber EDi hat die Frage ja schon (über-)beantwortet. Nur wenn Du Probleme mit der Umsetzung von EDis Antwort hast, kannst Du den Anhang ja vielleicht noch nachreichen.

LG,
Bernhard

Re: Aggregieren und Mittelwerte bilden

Verfasst: Do Dez 15, 2016 2:40 pm
von FridaKoriander
Screenshot dataset.png
Hallo zusammen,

erst mal vielen Dank für die Antworten!
Habe es nochmals versucht, den Screeshot anzuhängen...hoffe es hat jetzt geklappt.

Also ich habe die Daten über diese Funktion:

Code: Alles auswählen

aggregate(test$a, by = list(test$task, test$transition), mean)
...aggregiert. Rein aus Interesse...ich möchte ja die Mittelwerte von den Variablen a, zr, v, und t0 und habe einfach mal folgendes versucht:

Code: Alles auswählen

aggregate(test$v, test$zr, test$t0, test$a  by = list(test$task, test$transition), mean)
...was aber nicht funktioniert...gibt es da eine Möglichkeit, das elegant mit einer Funktion zu lösen? Somit hätte ich nämlich auch gleich eine einheitliche Tabelle.

Vielen Dank schon mal im Voraus!

Re: Aggregieren und Mittelwerte bilden

Verfasst: Do Dez 15, 2016 2:57 pm
von jogo
Hallo Frida,

bitte probier mal:

Code: Alles auswählen

aggregate(cbind(v, zr, t0, a) ~ task + transition, data=test, FUN=mean)
Gruß, Jörg
p.s.: Bitte Codestücke entsprechend formatieren (siehe viewtopic.php?f=20&t=29 )

Re: Aggregieren und Mittelwerte bilden

Verfasst: Do Dez 15, 2016 3:05 pm
von FridaKoriander
Toll! Vielen vielen Dank euch für die Hilfe!

Klappt alles wunderbar!

ups, das mit dem Code wusste ich nicht, werd´s mir für die Zukunft merken!
Grüße,
Frida