web-dev-qa-db-fra.com

Comment supprimez-vous l'en-tête dans un cadre de données?

Je veux supprimer l'en-tête d'un cadre de données que j'ai. J'ai lu les données d'un fichier csv puis je l'ai transposé, mais cela a créé un nouvel en-tête qui correspond au nom du fichier et à la ligne d'où proviennent les données.

Voici un exemple pour un df de dataframe:

     a.csv.1   a.csv.2   a.csv.3   ...
  x        5         6         1   ...
  y        2         3         2   ...  

Je veux supprimer la ligne a.csv.n, mais lorsque j'essaie df <- df[-1,], elle supprime la ligne x et non le haut. 

7
user2654764

Si vous n'aimez vraiment pas vraiment les noms de colonne, vous pouvez convertir votre cadre de données en une matrice (en gardant à l'esprit la contrainte éventuelle de variables de class différente), puis supprimer la dimnames.

dd <- data.frame(x1 = 1:5, x2 = 11:15)
mm1 <- as.matrix(dd)
mm2 <- matrix(mm1, ncol = ncol(dd), dimnames = NULL)

J'ajoute mon commentaire précédent ici aussi:
?data.frame: "Les noms de colonne ne doivent pas être vides et les tentatives d'utilisation de noms vides auront des résultats non pris en charge.". 

9
Henrik

Définir les noms sur NULL

names(df) <- NULL

Vous pouvez également utiliser l'option header dans read.csv

5
Karsten W.

Vous pouvez utiliser names(df) pour modifier les noms des noms d’en-tête ou de col. Si newnames est une liste de noms sous la forme newname<-list("col1","col2","col3"), alors names(df)<-newname vous donnera des données avec des noms de colonnes sous la forme col1 col2 col3. 

Comme @ Henrik l'a dit, les noms de cols ne doivent pas être vides. Définir la names(df)<-NULL donnera NA dans les noms de col. 

Si vos données sont au format csv et si vous utilisez header = TRUE pour lire les données en R, les données auront les mêmes noms de fichiers que le fichier csv, mais si vous définissez l'en-tête = FALSE, R attribuera les noms de fichiers V1, V2 ,. ..et vos noms de fichiers dans le fichier csv d'origine apparaissent en première ligne. 

anydata.csv  
      a b c  d
    1 1 2 3 13
    2 2 3 1 21

read.csv("anydata.csv",header=TRUE)
      a b c  d
    1 1 2 3 13
    2 2 3 1 21

read.csv("anydata.csv",header=FALSE)

  V1 V2 V3 V4
1  a  b  c  d
2  1  2  3 13
3  2  3  1 21
3
Metrics

Vous pourriez utiliser 

setNames(dat, rep(" ", length(dat)))

dat est le nom du bloc de données. Alors toutes les colonnes auront le nom " " et seront donc "invisibles".

3
Sven Hohenstein

Comme déjà mentionné, ne pas avoir de nom de colonne n'est pas quelque chose qui va arriver avec un bloc de données, mais je suppose que vous ne vous souciez pas trop de savoir s'ils sont là, vous ne voulez pas les voir quand vous imprimez votre cadre de données? Si c'est le cas, vous pouvez écrire une nouvelle fonction d'impression pour résoudre ce problème, comme suit:

> dat <- data.frame(var1=c("A","B","C"),var2=rnorm(3),var3=rnorm(3))
> print(dat)
  var1       var2       var3
1    A  1.2771777 -0.5726623
2    B -1.5000047  1.3249348
3    C  0.1989117 -1.4016253
> ncol.print <- function(dat) print(matrix(as.matrix(dat),ncol=ncol(dat),dimnames=NULL),quote=F)
> ncol.print(dat)
     [,1] [,2]       [,3]      
[1,] A     1.2771777 -0.5726623
[2,] B    -1.5000047  1.3249348
[3,] C     0.1989117 -1.4016253

Votre autre option consiste à définir les noms de vos variables sur des quantités uniques d'espaces, par exemple:

> names(dat) <- c(" ", "  ", "   ")
> dat

1 A  1.2771777 -0.5726623
2 B -1.5000047  1.3249348
3 C  0.1989117 -1.4016253

Vous pouvez aussi écrire une fonction faire ceci:

> blank.names <- function(dat){
+   for(i in 1:ncol(dat)){
+     names(dat)[i] <- paste(rep(" ",i),collapse="")
+   }
+   return(dat) 
+ }
> dat <- data.frame(var1=c("A","B","C"),var2=rnorm(3),var3=rnorm(3))
> dat
  var1        var2       var3
1    A -1.01230289  1.2740237
2    B -0.13855777  0.4689117
3    C -0.09703034 -0.4321877
> blank.names(dat)

1 A -1.01230289  1.2740237
2 B -0.13855777  0.4689117
3 C -0.09703034 -0.4321877

Mais en général, je ne pense pas que cela devrait être fait.

1
David

Une fonction que j'utilise dans l'un de mes scripts R:

read_matrix <- function (csvfile) {
    a <- read.csv(csvfile, header=FALSE)
    matrix(as.matrix(a), ncol=ncol(a), dimnames=NULL)
}

Comment appeler ça:

iops_even <-  read_matrix('even_iops_Jan15.csv')
iops_odd  <-  read_matrix('odd_iops_Jan15.csv')
0
Tagar