web-dev-qa-db-fra.com

Comment supprimer la première ligne d'un cadre de données dans R?

J'ai un ensemble de données avec 11 colonnes avec plus de 1000 lignes chacune. Les colonnes étaient étiquetées V1, V2, V11, etc. J'ai remplacé les noms par quelque chose de plus utile à l'aide de la commande "c". Je ne savais pas que la ligne 1 contenait également des étiquettes pour chaque colonne et que mes données réelles commençaient à la ligne 2.

Est-il possible de supprimer la ligne 1 et de la décrémenter?

77
akz

Conservez les étiquettes de votre fichier d'origine 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 data.frame, vous pouvez utiliser des index négatifs comme ceci:

df = df[-1,]

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

df$x = NULL

Voici quelques exemples simples sur 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
129
James Thompson

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, vous aurez peut-être plus de problèmes que de simplement supprimer les étiquettes qui se sont retrouvées à la ligne 1. Il est plus que probable que R ait interprété les données sous forme de texte, puis converti en facteurs. Vérifiez ce que str(foo), où foo est votre objet de données, indique les types de données.

On dirait que vous avez simplement besoin de header = TRUE dans votre appel pour lire les données (en supposant que vous les lisiez via read.table() ou l’un de ses wrappers.)

26
Gavin Simpson

Personne ne veut probablement vraiment supprimer la première ligne. Donc, si vous recherchez 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),]
12
user3495945

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

dat <- dat[2:nrow(dat), ]
5
Bipul Mohanto

dat <- dat[-1, ] a fonctionné mais cela a tué mon cadre de données en le changeant en un autre type. Nous avons dû utiliser à la place dat <- data.frame(dat[-1, ]), mais il s’agit peut-être d’un cas spécial, car cette base de données ne comptait initialement qu’une colonne.

5
cardamom

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

dat <- tail(dat, -1)

Ceci peut également être accompli en utilisant le package dplyr de Hadley Wickham.

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