Comment puis-je supprimer des lignes dans un bloc de données?
J'ai un bloc de données nommée "mydata" qui ressemble à ceci:
A B C D
1. 5 4 4 4
2. 5 4 4 4
3. 5 4 4 4
4. 5 4 4 4
5. 5 4 4 4
6. 5 4 4 4
7. 5 4 4 4
Je voudrais supprimer la ligne 2,4,6. Par exemple, comme ceci:
A B C D
1. 5 4 4 4
3. 5 4 4 4
5. 5 4 4 4
7. 5 4 4 4
- Aussi, vous pouvez devenir familier avec certains terminologie commune pour travailler avec les données. Ce qui est généralement dénommé subsetting, qui, si vous lancez une recherche dans Google "r sous-ensemble de données d'image", vous obtenez la très utile UCLA R page FAQ. Bienvenue sur Stackoverflow, par la manière dont!
- Ajout de quelques autres façons de subsetting à l'aide de vecteurs de booléens, en plus de @mrdwab excellente réponse.
- L'UCLA FAQ pour R subsetting a déménagé. Maintenant, c'est ici.
Vous devez vous connecter pour publier un commentaire.
L'idée clé est de vous former à un ensemble de lignes que vous souhaitez supprimer, et de garder le complément de l'ensemble.
Dans R, le complément d'un ensemble est donné par le '-' opérateur.
En supposant que la
data.frame
est appelémyData
:Bien sûr, n'oubliez pas de "réaffecter"
myData
si vous vouliez supprimer ces lignes entièrement---sinon, R juste imprime les résultats.,
dans il y! 😉drop = FALSE
là.-
ça ne marchera pas, parce que l'opérateur de complément pour les partitions logiques contenues est!
. Le complément de c(2,4,6) dans les lignes serait plutôt setdiff(c(2,4,6),1:nrow(myData)), ce qui n'est pas c(-2, -4, -6), bien que les deux produirait les mêmes lignes lorsqu'il est utilisé avec[
.,drop=F
juste avant la]
dans une matrice d'accès.Vous pouvez également travailler avec un vecteur booléen, aka
logical
:Noter que le
!
opérateur agit comme un PAS, c'est à dire!TRUE == FALSE
:Cela semble un peu lourd en comparaison à @mrwab de réponse (+1 btw :)), mais une logique vecteur peut être généré à la volée, par exemple, si une valeur de la colonne dépasse une certaine valeur:
Vous pouvez transformer un booléen, vectoriel d'un vecteur d'indices:
Enfin, un truc intéressant, c'est que vous pouvez utiliser ce genre de subsetting non seulement pour l'extraction, mais aussi pour mission:
où la colonne
A
est attribuéNA
(pas un nombre) oùA
dépasse 4.Des problèmes avec la suppression par un numéro de ligne
Rapide et sale analyses, vous pouvez supprimer des lignes de données.cadre de par le nombre que par la réponse sommet. I. e.,
Toutefois, si vous essayez d'écrire une solide analyse des données de script, vous devriez éviter de supprimer des lignes en position numérique. C'est parce que l'ordre des lignes dans vos données peuvent changer dans le futur. Un principe général d'un ensemble de données.de cadre ou de tables de base de données, c'est que l'ordre des lignes n'a plus d'importance. Si l'ordre a de l'importance, ce doit être encodée dans une variable réelle dans les données.cadre.
Par exemple, imaginez que vous avez importé un ensemble de données et de lignes supprimées par la position numérique après avoir inspecté les données et d'identifier les numéros de ligne des lignes que vous voulez supprimer. Cependant, à un moment plus tard, vous allez en données brutes et de regarder autour de soi et de réorganiser les données. Votre suppression de ligne de code va maintenant supprimer le mal rangées, et pire encore, vous êtes peu probable d'obtenir des erreurs d'avertissement vous que cela a eu lieu.
Meilleure stratégie
Une meilleure stratégie consiste à supprimer des lignes en fonction de fond et de propriétés stables de la ligne. Par exemple, si vous avez eu une
id
colonne variable qui identifie de manière unique chaque cas, vous pourriez l'utiliser.D'autres fois, vous aurez une exclusion formelle des critères qui pourraient être spécifié, et vous pouvez utiliser l'un des nombreux subsetting outils dans R, pour exclure les cas en fonction de la règle.
Créer colonne id dans votre bloc de données ou d'utiliser le nom d'une colonne pour identifier la ligne. À l'aide d'index n'est pas juste pour les supprimer.
Utilisation
subset
fonction pour créer un nouveau cadre.Par simplifié de la séquence :
Par la séquence :
Par l'effet négatif de la séquence :
Ou si vous souhaitez sous-ensemble en sélectionnant des numéros impairs:
Ou si vous souhaitez sous-ensemble en sélectionnant des numéros impairs, la version 2:
Ou si vous souhaitez sous-ensemble en filtrant les même numéros:
Ou si vous souhaitez sous-ensemble en filtrant les même numéros de version 2:
Supprimer Dan de l'employé.données - Pas besoin de gérer de nouvelles données.cadre.
Voici un moyen rapide et sale de fonction pour supprimer une ligne à l'index.
Son principal défaut est qu'il le row_index argument ne respecte pas les R d'être un vecteur de valeurs. Il y a peut être d'autres problèmes que je l'ai seulement passé une couple de minutes écrit et de le tester, et ont commencé à l'aide de R au cours des dernières semaines. Des commentaires et des améliorations sur ce serait très bienvenue!