Seite 1 von 1

Mittelwerte über bestimmten Wert

Verfasst: Do Jul 06, 2017 11:55 am
von janedoe
Hallo zusammen,

ich habe eine Datei, die folgendermaßen ansieht:

Code: Alles auswählen

Datum	phi	lam	T
20160101	48	16	-1
20160101	48,5	16,2	-0,4
20160101	49	16,4	-2,8
20160101	49,5	16,6	0
20160102	48	16	0,1
20160102	48,5	16,2	-0,9
20160102	49	16,4	-5
20160102	49,5	16,6	-1
20160106	48	16	-0,5
20160106	48,5	16,2	1
20160106	49	16,4	1,2
20160106	49,5	16,6	1,9
20160110	48	16	0,9
20160110	48,5	16,2	2,1
20160110	49	16,4	-0,1
20160110	49,5	16,6	0
20160114	48	16	-0,2
20160114	48,5	16,2	3
20160114	49	16,4	2,9
20160114	49,5	16,6	2,1
20160118	48	16	3,2
20160118	48,5	16,2	-0,4
20160118	49	16,4	-0,7
20160118	49,5	16,6	1
20160122	48	16	0
20160122	48,5	16,2	0,1
20160122	49	16,4	-0,2
20160122	49,5	16,6	-1,7
20160126	48	16	1,1
20160126	48,5	16,2	2
20160126	49	16,4	2,1
20160126	49,5	16,6	1,9
Die Datei setzt sich aus Datum, Ortskoord. und T-Wert zusammen. Jetzt möchte ich gerne die jeweiligen T-Werte mitteln. Also alle T-Wert bei phi=48 und lam = 16, von jedem Datum, dann die T-Werte bei phi=48,5 und lam = 16,2 usw. Hier komme ich leider nicht weiter. Brauche ich dazu unbedingt eine Schleife, oder kann man die Mittelung auch über die einzelnen Indixes durchführen? Bis jetzt habe ich nur den mean-Befehl verwendet, da konnte ich aber immer nur über die gesamte T-Spalte mitteln, ohne auf die Ortseingaben einzugehen.
Wäre toll, wenn mir da vielleicht jemand einen Tipp geben könnte.

LG.

Re: Mittelwerte über bestimmten Wert

Verfasst: Do Jul 06, 2017 12:48 pm
von jogo
Hallo janedoe,

Code: Alles auswählen

d <- read.table(header=TRUE, dec=",", text=
"Datum	phi	lam	T
20160101	48	16	-1
20160101	48,5	16,2	-0,4
20160101	49	16,4	-2,8
20160101	49,5	16,6	0
20160102	48	16	0,1
20160102	48,5	16,2	-0,9
20160102	49	16,4	-5
20160102	49,5	16,6	-1
20160106	48	16	-0,5
20160106	48,5	16,2	1
20160106	49	16,4	1,2
20160106	49,5	16,6	1,9
20160110	48	16	0,9
20160110	48,5	16,2	2,1
20160110	49	16,4	-0,1
20160110	49,5	16,6	0
20160114	48	16	-0,2
20160114	48,5	16,2	3
20160114	49	16,4	2,9
20160114	49,5	16,6	2,1
20160118	48	16	3,2
20160118	48,5	16,2	-0,4
20160118	49	16,4	-0,7
20160118	49,5	16,6	1
20160122	48	16	0
20160122	48,5	16,2	0,1
20160122	49	16,4	-0,2
20160122	49,5	16,6	-1,7
20160126	48	16	1,1
20160126	48,5	16,2	2
20160126	49	16,4	2,1
20160126	49,5	16,6	1,9")
aggregate(T ~ phi + lam, data=d, FUN=mean)
Es gibt viele Möglichkeiten, die Daten zu aggregieren:
https://stackoverflow.com/questions/350 ... vs-aggrega
Für solche Zwecke setzt man keine for-Schleife ein.

... und bitte bei Deiner nächsten Nachricht beachten:
viewtopic.php?f=20&t=29

Gruß, Jörg

Re: Mittelwerte über bestimmten Wert

Verfasst: Fr Jul 07, 2017 11:32 am
von janedoe
Lieber Jörg,

vielen Dank für deine Antwort.
Ich habe das probiert, leider bekomme ich als Mittelwert nur NAs heraus.
Kann es daran liegen, dass ich die Daten aus einer SQL-DB eingelesen habe und nachfolgend die Vektoren mit Data.Frame zusammen gefügt habe?

Code: Alles auswählen


library(RSQLite)
m <- dbDriver("SQLite")
con <- dbConnect(m, dbname = "example.sqlite")

alltables <- dbListTables(con)
alltables

T <- dbGetQuery(con, 'SELECT T2 FROM example_data WHERE "phiG" = :x', params = list(x = seq(48,52)))
phi <- dbGetQuery(con, 'SELECT phiG FROM example_data WHERE "phiG" = :x', params = list(x = seq(48,52)))
lam <- dbGetQuery(con, 'SELECT lam FROM example_data WHERE "phiG" = :x', params = list(x = seq(48,52)))

daten <- data.frame(T, phi, lam)
mittel_T <- aggregate(T ~ phi + lam, data=daten, FUN=mean)

Wäre toll, wenn du mir noch mal weiterhelfen könntest :shock:

Re: Mittelwerte über bestimmten Wert

Verfasst: Fr Jul 07, 2017 12:57 pm
von jogo
Liebe Jane,
janedoe hat geschrieben: Fr Jul 07, 2017 11:32 am Ich habe das probiert, leider bekomme ich als Mittelwert nur NAs heraus.
der Code - so wie ich ihn angegeben habe - rechnet ordentliche Mittelwerte.
Kann es daran liegen, dass ich die Daten aus einer SQL-DB eingelesen habe und nachfolgend die Vektoren mit Data.Frame zusammen gefügt habe?
meine Schätzung hierzu lautet: nein.
Wir werden das sehen, wenn Du in Deiner nächsten Nachricht den Output von

Code: Alles auswählen

str(daten)
zeigst. Meine Glaskugel meint nämlich, dass die Spalten gar nicht numerisch sind bzw. NAs in den Spalten enthalten sind.

noch besser: auch gleich das Ergebnis von

Code: Alles auswählen

summary(daten)
in die nächste Nachricht

Gruß, Jörg

Re: Mittelwerte über bestimmten Wert

Verfasst: Fr Jul 07, 2017 1:11 pm
von janedoe
Hallo Jörg,

mein Datenauszug

Code: Alles auswählen

'data.frame':   113916 obs. of  3 variables:
 $ T : chr  "-1,4" "-2,14" "-0,1" "0,2" ...
 $ phi   : chr  "48" "48,5" "49" "49,5" ...
 $ lam: chr  "14" "15" "16" "17" ...
 
> aggregate(T ~ phi + lam, data=daten, FUN=mean)
     phi lam T
1   48    15   NA
2   48,5    15   NA
3   49    15   NA
...
12  48    16   NA
13  48,5    16   NA
14  49    16   NA
...
23  48    17   NA
24  48,5    17   NA
25  49    17   NA
...
 
Vielen Dank fürs drüber schauen.
LG.

Re: Mittelwerte über bestimmten Wert

Verfasst: Fr Jul 07, 2017 1:22 pm
von jogo
Hallo Jane,

probier bitte:

Code: Alles auswählen

my2num <- function(x) as.numeric(sub(",", ".", x))
daten[] <- lapply(daten, my2num)

aggregate(T ~ phi + lam, data=daten, FUN=mean)
Gruß, Jörg

Re: Mittelwerte über bestimmten Wert

Verfasst: So Jul 09, 2017 1:12 pm
von janedoe
Hallo,

super danke. So funktioniert es :)

LG. Jane