37 Stimmen

Spalten mit allen fehlenden Werten finden

Ich schreibe eine Funktion, die prüfen muss, ob (und welche!) Spalte (Variable) alle fehlenden Werte enthält ( NA , <NA> ). Es folgt ein Fragment der Funktion:

test1 <- data.frame (matrix(c(1,2,3,NA,2,3,NA,NA,2), 3,3))
test2 <- data.frame (matrix(c(1,2,3,NA,NA,NA,NA,NA,2), 3,3))

na.test <-  function (data) {
  if (colSums(!is.na(data) == 0)){
      stop ("The some variable in the dataset has all missing value,
     remove the column to proceed")
      }
      }
na.test (test1)

Warning message:
In if (colSums(!is.na(data) == 0)) { :
  the condition has length > 1 and only the first element will be used

Q1: Warum tritt der obige Fehler auf und kann er behoben werden?

Q2: Gibt es eine Möglichkeit herauszufinden, welche der Spalten alle NA zum Beispiel die Liste ausgeben (Name der Variablen oder Spaltennummer)?

46voto

Andrie Punkte 169813

Dies ist einfach genug, um mit sapply und eine kleine anonyme Funktion:

sapply(test1, function(x)all(is.na(x)))
   X1    X2    X3 
FALSE FALSE FALSE 

sapply(test2, function(x)all(is.na(x)))
   X1    X2    X3 
FALSE  TRUE FALSE 

Und innerhalb einer Funktion:

na.test <-  function (x) {
  w <- sapply(x, function(x)all(is.na(x)))
  if (any(w)) {
    stop(paste("All NA in columns", paste(which(w), collapse=", ")))
  }
}

na.test(test1)

na.test(test2)
Error in na.test(test2) : All NA in columns 2

8voto

Choukha Ram Punkte 81

So finden Sie die Spalten, in denen alle Werte fehlen

 allmisscols <- apply(dataset,2, function(x)all(is.na(x)));  
 colswithallmiss <-names(allmisscols[allmisscols>0]);    
 print("the columns with all values missing");    
 print(colswithallmiss);

8voto

Tony Ladson Punkte 3229

In dplyr

ColNums_NotAllMissing <- function(df){ # helper function
  as.vector(which(colSums(is.na(df)) != nrow(df)))
}

df %>%
select(ColNums_NotAllMissing(.))

example:
x <- data.frame(x = c(NA, NA, NA), y = c(1, 2, NA), z = c(5, 6, 7))

x %>%
select(ColNums_NotAllMissing(.))

oder, andersherum

Cols_AllMissing <- function(df){ # helper function
  as.vector(which(colSums(is.na(df)) == nrow(df)))
}

x %>%
  select(-Cols_AllMissing(.))

6voto

AlexB Punkte 2645

Diese erzeugt die Spaltennamen, die voller NAs sind:

library(purrr)
df %>% keep(~all(is.na(.x))) %>% names

4voto

PHH13 Punkte 53

Um zu prüfen, ob Spalten alle fehlenden Werte enthalten:

apply(test1,2,function(x) {all(is.na(x))})

Um herauszufinden, in welchen Spalten alle Werte fehlen:

  test1.nona <- test1[ , colSums(is.na(test1)) == 0]

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