Summe aus Gruppierung in einer neuen Spalte

Allgemeine Statistik mit R, die Test-Methode ist noch nicht bekannt, ich habe noch keinen Plan!

Moderatoren: EDi, jogo

bigben
Beiträge: 2778
Registriert: Mi Okt 12, 2016 9:09 am

Re: Summe aus Gruppierung in einer neuen Spalte

Beitrag von bigben »

Hallo Werekorden
ich packe meine Frage mal hier mit hin da ich, naja eine ähnliche Frage habe.
Mach in Zukunft lieber neue Threads auf, dann bleibt das Forum übersichtlicher.

Werekorden hat geschrieben: Mo Aug 10, 2020 12:54 pmeine Tabelle erstellen bei der in einer neue Spalte der Mittelwert für die einzelnen Messwerte y bei gleicher Konzentration x erstellt werden. Jetzt braucht man aber z.B. bei der ersten Konzentration 100 den MW nicht in jeder Zeile sondern nur in der dritten Zeile usw.
Das ist für mich nicht ausreichend verständlich. Was soll denn in der ersten und zweiten Zeile mit der Konzentration stehen und wo willst Du einen Mittelwert bei den Konzentrationen haben, für die es keine dritte Zeile gibt?

Es ist sehr löblich, dass Du ein lauffähiges Minimalbeispiel postest (wenn auch mit einer Klammer zuviel), aber hier ist mir die Zielbeschreibung zu unklar. Vorläufig biete ich mal an, dass der Mittelwert in allen Zeilen steht:

Code: Alles auswählen

data$y.mw.per.x <- ave(data$y, data$x, FUN = mean)
Und einmal eine Lösung, wenn Du jeden Mittelwert nur einmal haben willst:

Code: Alles auswählen

dataMW2 <- tapply(data$y, data$x, FUN = mean)
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Werekorden
Beiträge: 83
Registriert: So Feb 04, 2018 7:52 pm

Re: Summe aus Gruppierung in einer neuen Spalte

Beitrag von Werekorden »

bigben hat geschrieben: Mo Aug 10, 2020 1:51 pm Mach in Zukunft lieber neue Threads auf, dann bleibt das Forum übersichtlicher.
OK

Also zur Tabelle. Die sieht dan in etwa so aus:

Code: Alles auswählen

x      y       MW
100  25.5
100  24.9
100  25.3    25.2
200  27.9
200  27.0    27.4
.
.
Es soll wie oben jeweils die letzte Zeile der entsprechenden Konzentration einen MW anzeigen.

VG
Andreas
bigben
Beiträge: 2778
Registriert: Mi Okt 12, 2016 9:09 am

Re: Summe aus Gruppierung in einer neuen Spalte

Beitrag von bigben »

Hi!

Das kannst Du in Excel machen, wo es leere Zellen gibt. In R ist das eine Spalte aus numerischen Werten und dann muss da auch in jeder Zeile ein numerischer Wert drin stehen. Bestenfalls kannst Du die anderen Zellen mit NA befüllen (und selbst das wären dann numerische NA).
Ich habe Schwierigkeiten mir vorzustellen, wozu das gut sein soll. Mein Bauchgefühl sagt, wir haben es mit einem XY-Problem zu tun: https://de.wikipedia.org/wiki/XY_Problem
Wenn Du ein wenig mehr Kontext schilderst, findet sich vielleicht ein grundlegend besserer Ansatz für das Problem.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Summe aus Gruppierung in einer neuen Spalte

Beitrag von EDi »

Schreib den Mittelwert überall rein und lösche (=setze auf NA) ihn in der 1&2 Zeile danach.

Oder du machst einen Join über die Zeilennummer - dazu brauchst du aber teilen Nummern im beiden Tabellen (nicht-Treffer werden dann mit NAs aufgefüllt).
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
bigben
Beiträge: 2778
Registriert: Mi Okt 12, 2016 9:09 am

Re: Summe aus Gruppierung in einer neuen Spalte

Beitrag von bigben »

PS so könnte man es mit NA machen:

Code: Alles auswählen

x <- c(100, 100, 100, 200, 200, 500, 500, 1000, 1000)
y <- c(25.5, 24.9, 25.3, 27.9, 27.0, 29.5, 29.7, 30.4, 31.1)
data <- data.frame(x, y)

data$y.mw.per.x <- ave(data$y, data$x, FUN = mean)
data$withNA <- NA
last.rows <- cumsum(rle(data$x)$length)
data$withNA[last.rows] <- data$y.mw.per.x[last.rows]
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Werekorden
Beiträge: 83
Registriert: So Feb 04, 2018 7:52 pm

Re: Summe aus Gruppierung in einer neuen Spalte

Beitrag von Werekorden »

HI,

Naja es geht eher darum, dass es eine ''Tabelle'' ergeben soll: Also mit kable in rmarkdown für pdf Präsentationen usw. in der dann z.B. der MW angezeigt wird, wie ich es oben gezeigt habe.

Ich dachte man müsste das erst in einem tibble anlegen.

Ich habe es fast schon geahnt, dass R, das nicht zulässt.
Irgendwie sollte man das dann mit kable und rmarkdown hinbekommen um eine ansehnliche Tabelle für z.b. Präsentation, Paper usw. hinzubekommen

Soll ich da einen neuen Thread aufmachen?

Danke bis hierhin für die Hilfe bzw. Klarstellung und sorry für die Unklarheiten meiner Seits.

VG
Andreas
bigben
Beiträge: 2778
Registriert: Mi Okt 12, 2016 9:09 am

Re: Summe aus Gruppierung in einer neuen Spalte

Beitrag von bigben »

Natürlich bekommt man das mit R hin :!:

Wenn es nur um die Ausgabe in einer Tabelle geht, müssen das ja keine Zahlen mehr sein, sondern können Strings sein. Dann sowas in der Art:

Code: Alles auswählen

x <- c(100, 100, 100, 200, 200, 500, 500, 1000, 1000)
y <- c(25.5, 24.9, 25.3, 27.9, 27.0, 29.5, 29.7, 30.4, 31.1)
data <- data.frame(x, y)

data$y.mw.per.x <- ave(data$y, data$x, FUN = mean)
data$withNA <- ""
last.rows <- cumsum(rle(data$x)$length)
data$withNA[last.rows] <- as.character(round(data$y.mw.per.x[last.rows],3))
data$y.mw.per.x <- NULL
print(data)
Rechnne lässt sich damit dann halt nicht mehr. Natürlich darfst Du da gerne noch ein tibble draus machen, wenn irgendwas davon dplyr sein muss 8-)

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Werekorden
Beiträge: 83
Registriert: So Feb 04, 2018 7:52 pm

Re: Summe aus Gruppierung in einer neuen Spalte

Beitrag von Werekorden »

Ich habe gerade überlegt, man könnte zumindest wenn überall eine gleiche Anzahl an Werten ist auch die Tabelle so erstellen:

Code: Alles auswählen

x     y1      y2    MW
100  25.5   24.9   25.2
200  27.9   27.0   27.4
500  29.5   30.1   29.8
 
dann könnte man den Mittelwert der beiden Variablen y1 und y2 berechnen gruppiert für die jeweiligen Konzentrationen.

Mhhh?
Werekorden
Beiträge: 83
Registriert: So Feb 04, 2018 7:52 pm

Re: Summe aus Gruppierung in einer neuen Spalte

Beitrag von Werekorden »

It worked so far,

Ich muss leider die Rohdaten direkt mit der deskriptiven Statistik zeigen, das ist ein Vorgabe. So kann ich es um sd usw. erweitern.

Code: Alles auswählen

x <- c(100, 200, 500, 1000)
y1 <- c(25.5, 27.9,  29.5,  30.4)
y2 <- c(24.9, 27.0, 29.7, 31.1)
y3 <- c(25.1, NA, NA, NA)
data <- data.frame(x, y1, y2, y3)

library(dplyr)
dataMW <- data %>%
  group_by(x) %>%
  summarise(w = mean (c(y1, y2, y3), na.rm = TRUE))
dataMW
mutate (data, dataMW)
VG
Andreas
bigben
Beiträge: 2778
Registriert: Mi Okt 12, 2016 9:09 am

Re: Summe aus Gruppierung in einer neuen Spalte

Beitrag von bigben »

Hallo Andreas,

mein letztex Code-Stück zeigt die Tabelle so, wie Du sie haben wolltest. Warum jetzt dann doch auf einmal ein weites Format mit NA-Einträgen?

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Antworten