Zusammenfassen von doppelten Werten

... zu anderer statistischer Software, zu Datenbanken und Programmiersprachen.

Moderatoren: EDi, jogo

mathrac

Zusammenfassen von doppelten Werten

Beitrag 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?
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Zusammenfassen von doppelten Werten

Beitrag 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()...
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.
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Zusammenfassen von doppelten Werten

Beitrag 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
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Zusammenfassen von doppelten Werten

Beitrag 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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Zusammenfassen von doppelten Werten

Beitrag 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
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Zusammenfassen von doppelten Werten

Beitrag 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 !
Benutzeravatar
student
Beiträge: 674
Registriert: Fr Okt 07, 2016 9:52 am

Re: Zusammenfassen von doppelten Werten

Beitrag von student »

Hallo Athomas,

willkommen zurück! :-)

Zu data.table habe ich auch etwas gemacht (das ist der Werbeblock! ;))
Viele Grüße,
Student
-----------------------------------------------------------------------------------------------------------------------
faes.de, Datenanalyse mit R & das Ad-Oculos-Projekt
Das Ad-Oculos-Projekt auf YouTube

Habe Mut, dich deines eigenen Verstandes zu bedienen! (Kant)
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Zusammenfassen von doppelten Werten

Beitrag 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
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Zusammenfassen von doppelten Werten

Beitrag von bigben »

Juuhuuuuu! Hallo Athomas - schön, Dich wieder an Bord zu sehen! :D
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
mathrac

Re: Zusammenfassen von doppelten Werten

Beitrag 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!
Antworten