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.
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.".
Définir les noms sur NULL
names(df) <- NULL
Vous pouvez également utiliser l'option header
dans read.csv
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
Vous pourriez utiliser
setNames(dat, rep(" ", length(dat)))
où dat
est le nom du bloc de données. Alors toutes les colonnes auront le nom " "
et seront donc "invisibles".
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.
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')