web-dev-qa-db-fra.com

Supprimer des colonnes avec des valeurs nulles d'une image

J'ai un data.frame: 

SelectVar
     a   b  c   d   e   f   g   h   i j k l ll m n o p  q   r
1 Dxa8 Dxa8 0 Dxa8 Dxa8 0 Dxa8 Dxa8 0 0 0 0  0 0 0 0 0 Dxc8 0
2 Dxb8 Dxc8 0 Dxe8 Dxi8 0 tneg tpos 0 0 0 0  0 0 0 0 0 Dxi8 0

Je voudrais supprimer les colonnes avec les valeurs zéro dans les deux lignes du cadre de données, afin qu'il produise un cadre de données comme ci-dessous:

SelectVar
     a   b    d    e    g   h     q   
1 Dxa8 Dxa8 Dxa8 Dxa8 Dxa8 Dxa8  Dxc8 
2 Dxb8 Dxc8 Dxe8 Dxi8 tneg tpos  Dxi8 

Ont essayé: 

SelectVar!=0

qui donne une image vraie/fausse, et:

SelectVar[, colSums(abs(SelectVar)) ! == 0]

ce qui donne une erreur. 

Comment puis-je supprimer les colonnes avec des valeurs zéro dans chaque ligne?

16
Barnaby

Vous l'avez presque. Mettez ces deux ensemble:

 SelectVar[, colSums(SelectVar != 0) > 0]

Cela fonctionne parce que les colonnes de facteurs sont évaluées comme des nombres> = 1.

32
Matthew Lundberg

Essayez aussi

SelectVar[, !apply(SelectVar == 0, 2, all)]

Cela a été pris d'ici:

Supprimer toutes les colonnes avec 0 de la matrice

3
Fernando

vous pouvez essayer quelque chose comme 

   [row, column] = SelectVar.shape
    for j in range(column):
       if np.all(SelectVar.iloc[:, j] == 0):
           SelectVar = SelectVar.drop(SelectVar.columns[j], axis=1, inplace=True)
0
Himanshu Aggarwal

Pour supprimer toutes les colonnes contenant uniquement des zéros, transmettez simplement votre cadre de données à la fonction suivante: 

remove_zero_cols <- function(df) {
  rem_vec <- NULL
  for(i in 1:ncol(df)){
    this_sum <- summary(df[,i])
    zero_test <- length(which(this_sum == 0))
    if(zero_test == 6) {
      rem_vec[i] <- names(df)[i]
    }
  }
  features_to_remove <- rem_vec[!is.na(rem_vec)]
  rem_ind <- which(names(df) %in% features_to_remove)
  df <- df[,-rem_ind]
  return(df)
}

Exemple: 

iris$Sepal.Width <- 0
new_df <- remove_zero_cols(iris)
print(new_df)
0
Cybernetic