J'ai un data.frame contenant certaines colonnes avec toutes les valeurs NA. Comment puis-je les supprimer du data.frame ?
Je peux utiliser la fonction,
na.omit(...)
en spécifiant des arguments supplémentaires ?
J'ai un data.frame contenant certaines colonnes avec toutes les valeurs NA. Comment puis-je les supprimer du data.frame ?
Je peux utiliser la fonction,
na.omit(...)
en spécifiant des arguments supplémentaires ?
Voici une solution dplyr :
df %>% select_if(~sum(!is.na(.)) > 0)
Mise à jour : Le site summarise_if()
est remplacée par la fonction dplyr 1.0
. Voici deux autres solutions qui utilisent le where()
fonction tidyselect :
df %>%
select(
where(
~sum(!is.na(.x)) > 0
)
)
df %>%
select(
where(
~!all(is.na(.x))
)
)
Il semble que vous vouliez supprimer UNIQUEMENT colonnes avec TOUTES NA
ce qui laisse des colonnes avec quelques lignes qui ont des NA
s. Je ferais cela (mais je suis sûr qu'il existe une solution vectorisée efficace) :
#set seed for reproducibility
set.seed <- 103
df <- data.frame( id = 1:10 , nas = rep( NA , 10 ) , vals = sample( c( 1:3 , NA ) , 10 , repl = TRUE ) )
df
# id nas vals
# 1 1 NA NA
# 2 2 NA 2
# 3 3 NA 1
# 4 4 NA 2
# 5 5 NA 2
# 6 6 NA 3
# 7 7 NA 2
# 8 8 NA 3
# 9 9 NA 3
# 10 10 NA 2
#Use this command to remove columns that are entirely NA values, it will leave columns where only some values are NA
df[ , ! apply( df , 2 , function(x) all(is.na(x)) ) ]
# id vals
# 1 1 NA
# 2 2 2
# 3 3 1
# 4 4 2
# 5 5 2
# 6 6 3
# 7 7 2
# 8 8 3
# 9 9 3
# 10 10 2
Si vous vous trouvez dans la situation où vous souhaitez supprimer les colonnes qui ont un quelconque NA
vous pouvez simplement modifier les valeurs all
ci-dessus pour any
.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.