Seite 1 von 1

Zwei Reihen im Datensatz zu einer umwandeln

Verfasst: Mo Sep 30, 2019 1:34 pm
von jms
Hallo zusammen,

ich hoffe, jemand von Euch kann mir mit diesem Problem weiterhelfen: Ich möchte zwei Reihen in einem Datensatz zu einer machen, --> Die neue Reihe soll die Mittelwerte der alten beiden Reihen enthalten (letztere sollen dann auch nicht mehr im Datensatz auftauchen.)

Eine Idee wäre, über mutate() eine neue Reihe einzüfügen, die alten dann zu löschen. Aber erstens habe ich noch nicht herausgefunden, wie ich über mutate() die Mittelwerte von zwei Reihen erstellen kann, zweitens gibt es vielleicht eine bessere Möglichkeit?

Bsp:
Die Reihen, die die Zahl 1 in der Variable/Spalte ID erhalten, sollen zu einer neuen Reihe werden, die die Mittelwerte aus den "alten" enthält. Aus Data soll Data2 werden.. :)

Code: Alles auswählen

Data <- data.frame(
  ID = c(1, 1, 2, 3),
  B = c(2, 4, 6, 8),
  C = c(10, 12, 14, 16)
)

Data2 <- data.frame(
  ID = c(1, 2, 3),
  B = c(3, 6, 8),
  C = c(11, 14, 16)
)
Falls Ihr weitere Erläuterungen bräuchtet, sagt mir (Anfängerin) bitte gern Bescheid. Schon einmal vielen Dank!
Liebe Grüße, Lara

Re: Zwei Reihen im Datensatz zu einer umwandeln

Verfasst: Mo Sep 30, 2019 1:43 pm
von bigben
Hallo Lara,

Um Mittelwerte von Reihen in Dataframes zu erhalten gibt es die sehr nützliche Funktion rowMeans.

Um beispielsweise die reihenweisen Mittelwerte der Spalten B und C in DAta zu erhalten:

Code: Alles auswählen

rowMeans(Data[,c("B", "C")])
Dein Beispiel habe ich hingegen nicht verstanden. Welche Operation überführt Data in Data2?

LG,
Bernhard

Re: Zwei Reihen im Datensatz zu einer umwandeln

Verfasst: Mo Sep 30, 2019 1:47 pm
von bigben
Sorry,

ich hab'S jetzt kapiert: Du willst aggregieren:

Code: Alles auswählen

Data2 <- aggregate(Data, by = list(Data$ID), mean)
Alternativ auch:

Code: Alles auswählen

> aggregate(cbind(B, C) ~ ID, data=Data, mean)
  ID B  C
1  1 3 11
2  2 6 14
3  3 8 16
LG,
Bernhard

Re: Zwei Reihen im Datensatz zu einer umwandeln

Verfasst: Mo Sep 30, 2019 1:53 pm
von jms
Hallo Bernhard,

wow, das ging schnell - vielen Dank, dass Du Dir die Zeit genommen hast!
Ich probiere das gleich aus und frag noch einmal, falls es nicht funktionieren sollte..

Vielen Dank!
Liebe Grüße und einen schönen Tag Dir, Lara