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()...
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
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
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)]
!
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!
Re: Zusammenfassen von doppelten Werten
Verfasst: Mi Feb 28, 2018 4:05 pm
von mathrac
vielen Dank für die Zahlreiche Helfer!
Ich habe das jetzt so gemacht:
aggregate(z$wert~z$zeitpunkt,data=z,mean)
Damit ging es relativ schnell und flexibel!