96 votes

Comment supprimer une ligne dans R ?

J'ai un ensemble de données comportant 11 colonnes de plus de 1000 lignes chacune. Les colonnes sont étiquetées V1, V2, V11, etc. J'ai remplacé les noms par quelque chose de plus utile pour moi en utilisant la commande "c". Je n'ai pas réalisé que la ligne 1 contenait également des étiquettes pour chaque colonne et que mes données réelles commencent à la ligne 2.

Existe-t-il un moyen de supprimer la ligne 1 et de décrémenter ?

149voto

James Thompson Points 15464

Conservez les étiquettes de votre fichier original comme ceci :

df = read.table('data.txt', header = T)

Si vous avez des colonnes nommées x et y, vous pouvez les adresser comme ceci :

df$x
df$y

Si vous souhaitez réellement supprimer la première ligne d'un cadre de données, vous pouvez utiliser des indices négatifs comme ceci :

df = df[-1,]

Si vous souhaitez supprimer une colonne d'un data.frame, vous pouvez lui attribuer la valeur NULL :

df$x = NULL

Voici quelques exemples simples de la façon de créer et de manipuler un data.frame dans R :

# create a data.frame with 10 rows
> x = rnorm(10)
> y = runif(10)
> df = data.frame( x, y )

# write it to a file
> write.table( df, 'test.txt', row.names = F, quote = F )

# read a data.frame from a file: 
> read.table( df, 'test.txt', header = T )

> df$x
 [1] -0.95343778 -0.63098637 -1.30646529  1.38906143  0.51703237 -0.02246754
 [7]  0.20583548  0.21530721  0.69087460  2.30610998
> df$y
 [1] 0.66658148 0.15355851 0.60098886 0.14284576 0.20408723 0.58271061
 [7] 0.05170994 0.83627336 0.76713317 0.95052671

> df$x = x
> df
            y           x
1  0.66658148 -0.95343778
2  0.15355851 -0.63098637
3  0.60098886 -1.30646529
4  0.14284576  1.38906143
5  0.20408723  0.51703237
6  0.58271061 -0.02246754
7  0.05170994  0.20583548
8  0.83627336  0.21530721
9  0.76713317  0.69087460
10 0.95052671  2.30610998

> df[-1,]
            y           x
2  0.15355851 -0.63098637
3  0.60098886 -1.30646529
4  0.14284576  1.38906143
5  0.20408723  0.51703237
6  0.58271061 -0.02246754
7  0.05170994  0.20583548
8  0.83627336  0.21530721
9  0.76713317  0.69087460
10 0.95052671  2.30610998

> df$x = NULL
> df 
            y
1  0.66658148
2  0.15355851
3  0.60098886
4  0.14284576
5  0.20408723
6  0.58271061
7  0.05170994
8  0.83627336
9  0.76713317
10 0.95052671

3 votes

Je ne suis pas sûr que ce soit clair pour @akz : en header=T le site T signifie TRUE Ce paramètre indique donc à R de charger l'en-tête. Voir ?read.table pour les détails.

0 votes

Notez que si vous disposez d'un cadre de données à une seule colonne, consultez cette réponse. stackoverflow.com/a/3232770/4606130 où vous aurez besoin d'un drop = FALSE ainsi que lors de l'indexation négative

31voto

Gavin Simpson Points 72349

Vous pouvez utiliser l'indexation négative pour supprimer des lignes, par exemple :

dat <- dat[-1, ]

Voici un exemple :

> dat <- data.frame(A = 1:3, B = 1:3)
> dat[-1, ]
  A B
2 2 2
3 3 3
> dat2 <- dat[-1, ]
> dat2
  A B
2 2 2
3 3 3

Cela dit, il se peut que vous ayez d'autres problèmes que la simple suppression des étiquettes qui se sont retrouvées sur la ligne 1. Il est plus que probable que R ait interprété les données comme du texte et les ait converties en facteurs. Vérifiez ce qui suit str(foo)foo est votre objet de données, dit sur les types de données.

On dirait que vous avez juste besoin header = TRUE dans votre appel pour lire les données (en supposant que vous les ayez lues par l'intermédiaire de read.table() ou l'une de ses enveloppes).

22voto

EMcKinney Points 171

Bien que je sois d'accord avec la réponse la plus votée, voici une autre façon de conserver toutes les rangées sauf la première :

dat <- tail(dat, -1)

Cela peut également être accompli en utilisant la méthode de Hadley Wickham dplyr paquet.

dat <- dat %>% slice(-1)

12voto

user3495945 Points 1

Personne n'a probablement envie de supprimer la première ligne. Donc, si vous cherchez quelque chose de significatif, c'est la sélection conditionnelle.

#remove rows that have long length and "0" value for vector E

>> setNew<-set[!(set$length=="long" & set$E==0),]

0 votes

Il s'agit d'une réponse à une question qui n'a pas été posée. Je pense que c'est plus déroutant qu'utile.

8voto

Bipul Mohanto Points 459

Je ne suis pas un expert, mais cela peut fonctionner aussi bien,

dat <- dat[2:nrow(dat), ]

0 votes

En fait, cela ne fonctionne pas lorsque nrow(dat) == 1 : Alors la donnée originale est préservée.

Prograide.com

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.

Powered by:

X