Seite 1 von 2

Zusammenfassen von doppelten Werten

Verfasst: So Feb 25, 2018 6:22 pm
von mathrac
Hallo ihr Lieben,
also es geht um folgendes:

Ich habe eine Tabelle mit 23 Spalten und 3 Zeilen. Darunter die Spalten "Zeitpunkt", "IP" und "Wert". Meine Aufgabe ist es jetzt, für jede IP die Werte passend zusammen zu fassen. Dabei soll darauf geachtet werden, dass bei gleichem Zeitpunkt nur der Mittelwert der jeweiligen Werte ausgegeben wird.
Also ich habe Bsp. die IP 21 zum Zeitpunkt 18 Uhr liegen zwei Werte vor. Nun von diesen 2 Punkten den Mittelwert des Wertes berechnen und dann wieder in die Tabelle einfügen.

Ich habe folgendes probiert:

if (duplicated(tabelle$zeitpunkt) = TRUE){tabelle$wert = with(merge(wert))};

Da komme ich nicht weiter, weil irgendwie muss ich ja die zwei Werte bekommen, so würde ich ja von allen werten den Mittelwert bekommen. Hat da jemand eine Idee wie ich das machen kann?

Re: Zusammenfassen von doppelten Werten

Verfasst: So Feb 25, 2018 10:34 pm
von EDi
Für jede Zeit x IP kombination soll also der Mittelwert berechnet werden. Mit dplyr würde ich das so machen:

Code: Alles auswählen

tabelle %>% 
group_by(zeitpunkt, ip) %>%
summarise(wert =mean(wert)) 
oder mit data.table

Code: Alles auswählen

tabelle[, list(wert = mean(wert)), list(zeitpunkt, ip)] 
jogo kommt bestimmt gleich mit split() um die Ecke und die große Glocke mit aggregate()...

Re: Zusammenfassen von doppelten Werten

Verfasst: Mo Feb 26, 2018 8:40 am
von jogo
EDi hat geschrieben: So Feb 25, 2018 10:34 pm jogo kommt bestimmt gleich mit split() um die Ecke und die große Glocke mit aggregate()...
:D
Es muss nicht immer split() sein und statt aggregate() kann man wahrscheinlich auch xtabs() einsetzen.
In Erinnerung an Athomas sollte auch noch ave() erwähnt werden. Für die eigentliche grundlegende Datenarbeit reicht auch tapply()

Gruß, Jörg

Re: Zusammenfassen von doppelten Werten

Verfasst: Mo Feb 26, 2018 2:53 pm
von bigben
Also wenn ich schon so freundlich gebeten werde, dann verzichte ich natürlich nicht auf eine aggregate-Lösung. Ich sage ja immer, dass man den jungen Leuten erst R beibringen soll, bevor man sie mit dplyr oder data.table oder ähnlichem verwirrt. Deshalb:

Code: Alles auswählen

bsp <- read.table(header= TRUE, text=
                    "Zeit    IP   Wert
                     12      12     12
                     12      13     13
                     12      13     14
                     14      12     15")

aggregate(x = bsp, by = list(bsp$Zeit, bsp$IP), FUN="mean")
@jogo: Ich habe gehört, besonders schnell geht es mit RCpp :D

LG,
Bernhard

Re: Zusammenfassen von doppelten Werten

Verfasst: Mo Feb 26, 2018 3:05 pm
von jogo
Hallo Berhard,
bigben hat geschrieben: Mo Feb 26, 2018 2:53 pm @jogo: Ich habe gehört, besonders schnell geht es mit RCpp :D
ja, und besonders krass fällt der Vergleich aus, wenn man es mit total verquastem R-Code vergleicht.

Gruß, Jörg

Re: Zusammenfassen von doppelten Werten

Verfasst: Mo Feb 26, 2018 8:29 pm
von Athomas
Hallo zusammen,
In Erinnerung an Athomas sollte auch noch ave() erwähnt werden.
Athomas ist inzwischen uneingeschränkt (d.h. auch für kleinere Tabellen) auf data.table.
Deshalb wäre
tabelle[, list(wert = mean(wert)), list(zeitpunkt, ip)]
auch seine Empfehlung.
Er benutzt allerdings die Abkürzung
tabelle[ , .(wert = mean(wert)), .(zeitpunkt, ip)]
:D !

Re: Zusammenfassen von doppelten Werten

Verfasst: Di Feb 27, 2018 8:08 am
von student
Hallo Athomas,

willkommen zurück! :-)

Zu data.table habe ich auch etwas gemacht (das ist der Werbeblock! ;))

Re: Zusammenfassen von doppelten Werten

Verfasst: Di Feb 27, 2018 8:42 am
von jogo
Hallo Thomas,

schön, dass Du wieder hier reinschaust!
Athomas hat geschrieben: Mo Feb 26, 2018 8:29 pm Hallo zusammen,
In Erinnerung an Athomas sollte auch noch ave() erwähnt werden.
Athomas ist inzwischen uneingeschränkt (d.h. auch für kleinere Tabellen) auf data.table.
Zumindest hat man dann für eine reichliche Anzahl von Aufgaben einen einheitlichen Aufbau der Parameter.

Gruß, Jörg

Re: Zusammenfassen von doppelten Werten

Verfasst: Di Feb 27, 2018 11:57 am
von bigben
Juuhuuuuu! Hallo Athomas - schön, Dich wieder an Bord zu sehen! :D

Re: Zusammenfassen von doppelten Werten

Verfasst: Mi Feb 28, 2018 4:05 pm
von mathrac
vielen Dank für die Zahlreiche Helfer! :D

Ich habe das jetzt so gemacht:

aggregate(z$wert~z$zeitpunkt,data=z,mean)

Damit ging es relativ schnell und flexibel!