'trim' muss nummerisch sein und Länge 1 haben

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

Moderatoren: EDi, jogo

Antworten
wbart
Beiträge: 89
Registriert: Fr Mär 16, 2018 4:08 pm

'trim' muss nummerisch sein und Länge 1 haben

Beitrag von wbart »

Hallo,
ich möchte in einem Datensatz die Mittelwerte berechnen und bekomme folgende Fehlermeldung:

Code: Alles auswählen

Error in mean.default(ratio.all.named.withoutNA$`Ratio P1`, ratio.all.named.withoutNA$`Ratio P2`,  : 
  'trim' muss nummerisch sein und Länge 1 haben
In addition: Warning message:
In if (na.rm) x <- x[!is.na(x)] :
  the condition has length > 1 and only the first element will be used
ich habe den Datensatz im Vorfeld mit na.omit von allen fehlenden Werten befreit:

Code: Alles auswählen

> ratio.all.named.withoutNA <- na.omit(ratio.all.named)
ich bin davon ausgegangen, dass na.omit zeilenweise löscht, da die Anzahl der Zeilen bei allen Spalten gleich ist.
R scheint das Löschen der NA Werte gespeichert zu haben.

Code: Alles auswählen

> str(ratio.all.named.withoutNA)
'data.frame':	30404 obs. of  8 variables:
 $ Primary.Sequence.Name: Factor w/ 22071 levels "","A1BG","A1BG-AS1",..: 19237 18476 19855 367 15346 3589 1448 18171 7332 522 ...
 $ Ratio P1             : num  1.651 0.957 1.2 1.082 0.935 ...
 $ Ratio P2             : num  1.48 1.24 1.07 1.08 1.19 ...
 $ Ratio P3             : num  1.635 1.118 1.172 1.191 0.975 ...
 $ Ratio M1             : num  1.437 1.126 1.099 0.929 1.249 ...
 $ Ratio M2             : num  1.38 1.14 1.05 1 1.07 ...
 $ Ratio Q1             : num  0.597 0.957 1.153 0.643 0.961 ...
 $ Ratio Q2             : num  1.323 0.996 1.123 0.96 0.785 ...
 - attr(*, "na.action")=Class 'omit'  Named int [1:32] 840 844 1711 3316 3388 3489 5145 5216 6017 7097 ...
  .. ..- attr(*, "names")= chr [1:32] "885" "889" "1775" "3396" ...
Ein subset der Datei mit 1000 Zeilen vor dem löschen der NAs habe ich exportiert und beigefügt.

Könnt ihr mir sagen was ich falsch mache?

VG
wbart
Dateianhänge
ratio.all.named.withoutNA.subset1000.txt
(68.86 KiB) 48-mal heruntergeladen
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: 'trim' muss nummerisch sein und Länge 1 haben

Beitrag von jogo »

Hallo wbart,

das ist schon mal gut, dass Du uns die Struktur des Dataframes zeigst.
Aber ich vermisse die Codezeile, die den Fehler provoziert hat. Kannst Du uns diesbezüglich etwas mehr zeigen?

Gruß. Jörg
wbart
Beiträge: 89
Registriert: Fr Mär 16, 2018 4:08 pm

Re: 'trim' muss nummerisch sein und Länge 1 haben

Beitrag von wbart »

Bin leider nicht mehr am Arbeitsplatz. Ich reiche den Code am Montag nach.
Ein schönes Wochenende wünsche ich dir.
Gruß
Wbart
wbart
Beiträge: 89
Registriert: Fr Mär 16, 2018 4:08 pm

Re: 'trim' muss nummerisch sein und Länge 1 haben

Beitrag von wbart »

Hallo,
hier noch mal der code:

Code: Alles auswählen

> ratio.MW <- ratio.all.named # neuer Name
> ratio.MW <- na.omit(ratio.MW) # Tabelle von NA befreien
> ratio.MW$MWPlacebo <- mean(ratio.MW$`Ratio P1`, ratio.MW$`Ratio P2`,ratio.MW$`Ratio P3`) # Spalte für MW Placebo anhängen und berechnen
Error in mean.default(ratio.MW$`Ratio P1`, ratio.MW$`Ratio P2`, ratio.MW$`Ratio P3`) : 
  'trim' muss nummerisch sein und Länge 1 haben
In addition: Warning message:
In if (na.rm) x <- x[!is.na(x)] :
  the condition has length > 1 and only the first element will be used
Ich wollte die Fehlermeldung noch in rot darstellen, hat aber nicht geklappt. Sorry

Ich hoffe du kannst jetzt mehr damit anfangen.

VG
wbart
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: 'trim' muss nummerisch sein und Länge 1 haben

Beitrag von jogo »

Hallo wbart,

na bitte, da haben wir es auch schon:
mean() kann den Mittelwert nur für einen Vektor berechnen. Die Dokumentation von mean() sagt:
mean(x, trim = 0, na.rm = FALSE, ...) Das erste Argument ist der Vektor, das zweite der Parameter trim= und das dritte der Parameter na.rm=.
Natürlich kann man drei Vektoren mit c() zu einem zusammenfassen, aber es ist eher unwahrscheinlich, dass Du das so möchtest.
Aus Deinem Kommentar in der Zeile vermute ich, Du möchtest:

Code: Alles auswählen

ratio.MW$MWPlacebo <- (ratio.MW$`Ratio P1`+ ratio.MW$`Ratio P2`+ratio.MW$`Ratio P3`)/3
# alternativ: ratio.MW$MWPlacebo <- with(ratio.MW, (`Ratio P1`+ `Ratio P2` + `Ratio P3`)/3)
# oder ratio.MW$MWPlacebo <- rowMeans(ratio.MW[, c(`Ratio P1`, `Ratio P2`, `Ratio P3`)])
Wenn noch mehr solche Sachen zu berechnen sind, lohnt sich ein Blick auf transform()

Gruß, Jörg
wbart
Beiträge: 89
Registriert: Fr Mär 16, 2018 4:08 pm

Re: 'trim' muss nummerisch sein und Länge 1 haben

Beitrag von wbart »

Vielen Dank
Antworten