La pré-étape du traitement des données consiste à lire les données. Ici, lorsque vous lisez les données dont vous disposez, vous avez souvent des colonnes vides ou des colonnes qui ne sont pas de la même longueur et vous souhaitez supprimer les colonnes inutiles. Supposons que vous lisiez le tableau suivant.
a | b | c | d |
---|---|---|---|
1 | 2 | 3 | NA |
2 | 3 | 4 | NA |
3 | 4 | NA | NA |
df <- data.frame(a = c(1,2,3),
b = c(2,3,4),
c = c(3,4,NA),
d = c(NA,NA,NA))
> df
a b c d
1 1 2 3 NA
2 2 3 4 NA
3 3 4 NA NA
library(dplyr)
Appliquez ʻanyNA () `pour vérifier si NA est inclus pour chaque colonne, et inversez la valeur de retour en tant que vecteur logique.
df %>% lapply(.,anyNA) %>% unlist %>% !.
a b c d
TRUE TRUE FALSE FALSE
Passez ceci à la fonction select_if ()
, qui sélectionne les colonnes qui remplissent les conditions.
df %>% select_if(lapply(.,anyNA) %>% unlist %>% !.)
a b
1 1 2
2 2 3
3 3 4
J'ai réussi à me débarrasser des colonnes inutiles avec un script en une ligne. Je pense que la lisibilité n'est pas si mauvaise grâce au tuyau.
Le commentaire de @hkzm était utile.
L'utilisation de purrr :: negat ()
, qui passe le refus de la fonction donnée, l'a rendue plus directe et plus simple à écrire.
library(tidyverse)
df %>% select_if(negate(anyNA))
a b
1 1 2
2 2 3
3 3 4
Cela équivaut à inverser avec l'opérateur !
Et à en faire une formule avec ~
.
df %>% select_if(~ !anyNA(.))
a b
1 1 2
2 2 3
3 3 4
Personnellement, je pensais que celui avec une meilleure lisibilité serait celui utilisant purrr :: negat ()
.
Pour les pandas Python, il existe une méthode dropna ()
qui supprime les valeurs manquantes, qui est applicable à la fois dans les directions de ligne et de colonne.
Référence: Exclure (supprimer) / remplacer (remplir) / extraire la valeur manquante NaN avec pandas
--Supprimer les colonnes contenant au moins un NA
dropna(how='any', axis=1)
--Supprimer toutes les colonnes NAdropna(how='all', axis=1)
Cependant, dans R, la seule fonction qui supprime les valeurs manquantes est dans le sens des lignes.
--Supprimer les lignes contenant au moins un NA
na.omit()
J'ai fait une recherche sur Google et cherché un moyen de supprimer dans le sens de la colonne, mais je ne pouvais pas le trouver facilement. J'ai enfin trouvé cet article.
Moyens de supprimer les colonnes contenant NA dans R
Selon le langage de programmation, vous pouvez avoir des forces et des faiblesses. Pourquoi n'y a-t-il pas une fonction similaire dans R?
Recommended Posts