2012-04-11 12 views
1

Ich versuche, Operationen auf einer Reihe von Listen durchzuführen. Zum Beispiel:
Listen: (1, 1, 2, 3, 3, 4, 4, 4, 4, 4, 5), (1, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, (1, 1, 1, 1, NA, NA, NA, NA, NA, NA, NA, NA), (1, 1, 2, 3, 3, 4, 4, 4, 4, 4, 4, 5)Mathematica: Operationen auf Liste mit fehlenden Werten

Dann möchte ich zum Beispiel eine Liste mit den Mitteln haben. Mean [lists] wird nicht ordnungsgemäß ausgeführt, da es nicht weiß, wie mit den fehlenden Werten "NA" verfahren werden soll. Was ich erwarte ist: (1, 1, 5/3, 7/3, 3, 4, 4 usw.)

Kann jemand die fehlenden oder "Text" -Werte ignorieren? So wie Sie zum Beispiel eine solche Funktion in Excel ausführen würden. Danke!

+3

Vielleicht finden Sie hier weitere Hilfe: http://mathematica.stackexchange.com/ –

Antwort

2

Es sieht so aus, als ob Sie an dem Mittelwert der Spalten der Matrix interessiert sind. Wenn Ihre Daten Array rechteckig ist, könnte man so etwas wie diese

lst = {{1, 1, 1, "NA", "NA"}, {2, 3, 4, 5, "NA"}, {6, 7, 8, 9, 10}}; 
Mean /@ DeleteCases[Transpose[lst], a_ /; Not[NumericQ[a]], {-1}] 

Eine einfachere Methode tun wäre zu ersetzen, was Symbol für nicht vorhandene Elemente verwendet wird (beispielsweise "NA" in lst) von Sequence[]:

Mean /@ (Transpose[lst] /. "NA" -> Sequence[]) 
2
l = {{1, 1, 1, "NA", "NA"}, {2, 3, 4, 5, "NA"}} 
[email protected]# & /@ (Cases[#, [email protected]"NA"] & /@ l) 

(* 
-> {1, 7/2} 
*) 
+0

Auch 'Mean/@ (Fälle [#, außer @" NA "] &/@ l)' –