1061 Stimmen

Zeilen mit allen oder einigen NAs (fehlenden Werten) im data.frame entfernen

Ich würde gerne die Zeilen in diesem Datenrahmen entfernen, die:

a) enthalten NA s über alle Spalten hinweg. Nachfolgend finden Sie ein Beispiel für einen Datenrahmen.

             gene hsap mmul mmus rnor cfam
1 ENSG00000208234    0   NA   NA   NA   NA
2 ENSG00000199674    0   2    2    2    2
3 ENSG00000221622    0   NA   NA   NA   NA
4 ENSG00000207604    0   NA   NA   1    2
5 ENSG00000207431    0   NA   NA   NA   NA
6 ENSG00000221312    0   1    2    3    2

Im Grunde möchte ich einen Datenrahmen wie den folgenden erhalten.

             gene hsap mmul mmus rnor cfam
2 ENSG00000199674    0   2    2    2    2
6 ENSG00000221312    0   1    2    3    2

b) enthalten NA s nur in einigen Spalten so kann ich auch dieses Ergebnis erhalten:

             gene hsap mmul mmus rnor cfam
2 ENSG00000199674    0   2    2    2    2
4 ENSG00000207604    0   NA   NA   1    2
6 ENSG00000221312    0   1    2    3    2

4voto

sapy Punkte 7878
delete.dirt <- function(DF, dart=c('NA')) {
  dirty_rows <- apply(DF, 1, function(r) !any(r %in% dart))
  DF <- DF[dirty_rows, ]
}

mydata <- delete.dirt(mydata)

Die obige Funktion löscht alle Zeilen aus dem Datenrahmen, die in irgendeiner Spalte "NA" enthalten, und gibt die resultierenden Daten zurück. Wenn Sie auf mehrere Werte prüfen wollen, wie NA y ? ändern dart=c('NA') in der Funktion param zu dart=c('NA', '?')

4voto

Joni Hoppen Punkte 608

Ich vermute, dass dies auf diese Weise eleganter gelöst werden könnte:

  m <- matrix(1:25, ncol = 5)
  m[c(1, 6, 13, 25)] <- NA
  df <- data.frame(m)
  library(dplyr) 
  df %>%
  filter_all(any_vars(is.na(.)))
  #>   X1 X2 X3 X4 X5
  #> 1 NA NA 11 16 21
  #> 2  3  8 NA 18 23
  #> 3  5 10 15 20 NA

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X