2016-06-17 14 views
9

Ich möchte na.omit (Daten) für das folgende Beispiel-Dataset verwenden, aber unter einer Bedingung, um Zeilen mit NAs nur zu entfernen, wenn sie vorhanden sind, sagen wir "mehr als 30%" der Spalten.Wie können Zeilen mit NAs nur entfernt werden, wenn sie in mehr als einem bestimmten Prozentsatz von Spalten vorhanden sind?

Daten:

 C1  C2  C3  C4  C5 
Gene1 0.07 NA  0.05 0.07 0.07 
Gene2 0.2 0.18 0.16 0.15 0.15 
Gene3 NA  0.93 0.9 NA  0.92 
Gene4 0.32 0.05 0.12 0.13 0.05 
Gene5 0.44 0.53 0.46 0.03 0.47 
Gene6 NA  0.34 NA  0.8 NA 
Gene7 0.49 0.55 0.67 0.49 0.89 
Gene8 0.25 NA  0.49 NA  NA 
Gene9 0.1 0.1 0.05 NA  0.09 

die resultierende Datei sollte also wie folgt aussehen:

 C1  C2  C3  C4  C5 
Gene1 0.07 NA  0.05 0.07 0.07 
Gene2 0.2 0.18 0.16 0.15 0.15 
Gene4 0.32 0.05 0.12 0.13 0.05 
Gene5 0.44 0.53 0.46 0.03 0.47 
Gene7 0.49 0.55 0.67 0.49 0.89 
Gene9 0.1 0.1 0.05 NA  0.09 

Danke für die Hilfe!

+0

Wie sind Sie entscheiden, welche NA-Werte zu entfernen? –

+0

Hallo Tim, es kommt nicht darauf an, welche NAs. Nur wenn mehr als 30% NA für eine bestimmte Zeile vorhanden sind, wird die Zeile vollständig entfernt. – Letin

+0

Was haben Sie versucht? Zeigen Sie etwas Code. –

Antwort

7

Sie können auf die Zeilensummen von NA Teilmenge basierend Werte:

test[!rowSums(is.na(test)) > ncol(test)*.3,] 

     C1 C2 C3 C4 C5 
Gene1 0.07 NA 0.05 0.07 0.07 
Gene2 0.20 0.18 0.16 0.15 0.15 
Gene4 0.32 0.05 0.12 0.13 0.05 
Gene5 0.44 0.53 0.46 0.03 0.47 
Gene7 0.49 0.55 0.67 0.49 0.89 
Gene9 0.10 0.10 0.05 NA 0.09 
+7

Ich würde gehen für 'dat [rowMeans (is.na (dat)) <= .3,]' –

4

Hier ist eine weitere Version mit Reduce

df1[!Reduce(`+`, lapply(df1, is.na)) > ncol(df1)*0.3,] 
#  C1 C2 C3 C4 C5 
#Gene1 0.07 NA 0.05 0.07 0.07 
#Gene2 0.20 0.18 0.16 0.15 0.15 
#Gene4 0.32 0.05 0.12 0.13 0.05 
#Gene5 0.44 0.53 0.46 0.03 0.47 
#Gene7 0.49 0.55 0.67 0.49 0.89 
#Gene9 0.10 0.10 0.05 NA 0.09 
+2

dat [Reduzieren ('+', lapply (dat, is.na))

4

Und hier eine weitere Option gelten

dat[apply(dat,1,function(x){sum(is.na(x))/dim(dat)[2]})<0.3,] 

#C1 C2 C3 C4 C5 
#Gene1 0.07 NA 0.05 0.07 0.07 
#Gene2 0.20 0.18 0.16 0.15 0.15 
#Gene4 0.32 0.05 0.12 0.13 0.05 
#Gene5 0.44 0.53 0.46 0.03 0.47 
#Gene7 0.49 0.55 0.67 0.49 0.89 
#Gene9 0.10 0.10 0.05 NA 0.09