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))
4 Réponses :
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
Vous pouvez utiliser ou avec la base r, vous pouvez utiliser filtre_at code> avec des colonnes sélectionnées ou une plage de colonnes
rowsums code> p>
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 code> au lieu de
any_vars code>. J'ai mis à jour la réponse.
dans la base R sans un pour code> boucle:
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, ]