0
votes

Supprimer plusieurs lignes avec des valeurs de chaîne spécifiques

J'ai une trame de données avec quelques centaines de colonnes. Je souhaite supprimer les lignes des colonnes sélectionnées avec les valeurs "Élément ignorée" ou "".

voir ci-dessous par exemple. Idéalement, je voudrais supprimer toutes les lignes dans lesquelles les colonnes "animal" et "assurance" contiennent "l'élément ignoré" ou "", mais ne veulent pas que cela s'applique à d'autres colonnes. P>

Dans mon cadre de données réel Il y a environ 34 colonnes où je souhaite retirer les colonnes avec ces chaînes et 128 où je ne le fais pas. Les conseils seraient grandement appréciés. P>

dat <- data.frame(animal=c("dog","cat","Item skipped", ""), Insurance=c("Y", "N","Item skipped",""), condition = c("",
                  "Asthma","Item skipped",""), age = rep(c(6,10), each = 2))


0 commentaires

4 Réponses :


0
votes

Vous pouvez toujours le faire avec A pour une boucle, d'autant plus que votre jeu de données est petit.

> remove_cols <- c('animal', 'Insurance') # vector of names of all columns you'll use to drop rows
> remove_vals <- c('', 'Item skipped') # values which indicate a row that should be dropped
> 
> for(col in remove_cols){
+   dat <- dat[!dat[[col]] %in% remove_vals, ]
+ }
> 
> head(dat)
  animal Insurance condition age
1    dog         Y             6
2    cat         N    Asthma   6


0 commentaires

5
votes

Vous pouvez utiliser filtre_at avec des colonnes sélectionnées ou une plage de colonnes xxx


ou avec la base r, vous pouvez utiliser rowsums xxx


2 commentaires

Merci. Et si je voulais utiliser dplyr mais que je voulais énumérer les colonnes par nom, car ils ne sont pas consécutifs IE% DAT%>% filtre_at (VARS (animal, assurance), Any_vars (!.% en% C ("Élément ignoré", "" ))))


@Monkeyshines J'ai initialement fait une erreur, vous pourriez avoir besoin all_vars au lieu de any_vars . J'ai mis à jour la réponse.



1
votes

dans la base R sans un pour boucle: xxx


0 commentaires

-1
votes

Utilisation de la base R sans besoin d'appliquer plus de packages:

# Find rows that match content of 2 column cell values.
rows_to_delete <- which(dat$animal == "Item skipped" & dat$Insurance == "Item skipped")

# Delete row. 
# Add result in new dataframe [dat2].
# Keep old dataframe for comparison [dat].
dat2 <- dat[-rows_to_delete, ]


0 commentaires