Mittelwerte über bestimmten Wert

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Antworten
janedoe

Mittelwerte über bestimmten Wert

Beitrag 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.
Zuletzt geändert von jogo am Do Jul 06, 2017 12:52 pm, insgesamt 1-mal geändert.
Grund: Formatierung
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Mittelwerte über bestimmten Wert

Beitrag 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
janedoe

Re: Mittelwerte über bestimmten Wert

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

Re: Mittelwerte über bestimmten Wert

Beitrag 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
janedoe

Re: Mittelwerte über bestimmten Wert

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

Re: Mittelwerte über bestimmten Wert

Beitrag 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
janedoe

Re: Mittelwerte über bestimmten Wert

Beitrag von janedoe »

Hallo,

super danke. So funktioniert es :)

LG. Jane
Antworten