Je souhaite supprimer facilement une colonne contenant NA dans R

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

Utiliser dplyr :: select_if

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.

Postscript: utiliser purrr :: negate ()

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 ().

C'est facile avec Python, mais j'ai du mal avec R pour une raison quelconque

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

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

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

Je souhaite supprimer facilement une colonne contenant NA dans R
Je veux facilement implémenter le délai d'expiration en python
Je veux utiliser le jeu de données R avec python
Je souhaite utiliser facilement les fonctions R avec le notebook ipython
Je veux imprimer dans la notation d'inclusion
Je veux intégrer Matplotlib dans PySimpleGUI
Je veux faire le test de Dunnett en Python
Je souhaite créer facilement un modèle de bruit
Je veux corriger Datetime.now dans le test de Django
Je veux créer une fenêtre avec Python
Quoi qu'il en soit, je veux vérifier facilement les données JSON
Je souhaite stocker les informations de la base de données dans la liste
Je veux fusionner des dictionnaires imbriqués en Python
Je veux trouver facilement une délicieuse boutique
Je veux afficher la progression en Python!
Je veux écrire en Python! (1) Vérification du format de code
Je souhaite intégrer une variable dans une chaîne Python
Je veux faire la transition avec un bouton sur le ballon
Je veux utiliser self avec Backpropagation (tf.custom_gradient) (tensorflow)
Je veux écrire en Python! (2) Écrivons un test
Même avec JavaScript, je veux voir Python `range ()`!
Je veux échantillonner au hasard un fichier avec Python
Je souhaite créer facilement un environnement de développement basé sur un modèle
Je veux travailler avec un robot en python.
Je veux écrire en Python! (3) Utiliser des simulacres
Je veux faire quelque chose avec Python à la fin
Je veux manipuler des chaînes dans Kotlin comme Python!
Je veux faire quelque chose comme sort uniq en Python
Je veux résoudre SUDOKU
[Django] Je souhaite me connecter automatiquement après une nouvelle inscription
Je veux rendre le type de dictionnaire dans la liste unique
[Introduction à Pytorch] Je souhaite générer des phrases dans des articles de presse
Je veux compter des valeurs uniques dans un tableau ou un tuple
Je veux aligner les nombres valides dans le tableau Numpy
Je veux pouvoir exécuter Python avec VS Code
Je veux ajouter un joli complément à input () en python
Je voulais supprimer plusieurs objets en s3 avec boto3
Je ne voulais pas écrire la clé AWS dans le programme
[Linux] Je souhaite connaître la date à laquelle l'utilisateur s'est connecté
Je veux résoudre APG4b avec Python (seulement 4.01 et 4.04 au chapitre 4)
Je veux utiliser des rails avec des rails même dans un environnement vagabond
Développement LINEbot, je souhaite vérifier le fonctionnement dans l'environnement local
[Couches Python / AWS Lambda] Je souhaite réutiliser uniquement le module dans AWS Lambda Layers
Je veux créer un fichier pip et le refléter dans le menu fixe
Je veux faire de la deuxième ligne le nom de la colonne dans pandas
Je veux réussir le test G dans un mois Jour 1
Je veux connaître la population de chaque pays du monde.
Je veux comprendre à peu près systemd
Je veux gratter des images et les former
Je veux faire ○○ avec les Pandas
Je veux copier l'annotation de yolo
Je veux déboguer avec Python
Je veux changer la couleur en cliquant sur le point de dispersion dans matplotlib
Je veux trouver des variations dans diverses statistiques! Recommandation de rééchantillonnage (Bootstrap)
"CSI" que je souhaite enseigner aux débutants en production d'applications pour console interactive
(Matplotlib) Je veux dessiner un graphique avec une taille spécifiée en pixels
[Langage C] Je souhaite générer des nombres aléatoires dans la plage spécifiée
Je souhaite convertir une table convertie en PDF en Python en CSV
Je veux convertir par lots le résultat de "chaîne de caractères" .split () en Python
Je veux expliquer en détail la classe abstraite (ABCmeta) de Python
J'ai analysé les données Airbnb pour ceux qui veulent rester à Amsterdam