web-dev-qa-db-fra.com

La spécification des noms de colonne dans un data.frame modifie les espaces en "."

Disons que j'ai un data.frame, comme ceci: 

x <- c(1:10,1:10,1:10,1:10,1:10,1:10,1:10,1:10,1:10,1:10)
df <- data.frame("Label 1"=x,"Label 2"=rnorm(100))

tête (df, 3)

résultats:

  Label.1    Label.2
1       1  1.9825458
2       2 -0.4515584
3       3  0.6397516

Comment faire pour que R cesse de remplacer automatiquement l'espace par un point dans le nom de la colonne? c'est-à-dire "Label 1" au lieu de "Label.1".

26
Brandon Bertelsen

Vous pas.

Avec l’espace que vous souhaitez, le format ne satisferait pas aux exigences relatives à un identifiant qui apparaît lorsque vous utilisez df$column.1 - qui ne peut pas gérer un espace. Alors voyez la fonction make.names() pour plus de détails ou un exemple:

> make.names(c("Foo Bar", "tic tac"))
[1] "Foo.Bar" "tic.tac"  
>                                              
8
Dirk Eddelbuettel

Vous pouvez définir check.names = FALSE dans data.frame (ainsi que dans read.table):

df <- data.frame("Label 1" = 1:3, "Label 2" = rnorm(3), check.names = FALSE)

résultats: 

  Label 1    Label 2
1       1  0.2013347
2       2  1.8823111
3       3 -0.5233811

De ?data.frame:

check.names
logique. Si TRUE, les noms des variables du bloc de données sont vérifiés afin de s'assurer qu'ils sont des noms de variable syntaxiquement corrects et qu'ils ne sont pas dupliqués. Si nécessaire, ils sont ajustés (par make.names) afin qu'ils le soient.


De ?make.names:

Un nom syntaxiquement valide se compose de lettres, de chiffres et du point ou des caractères soulignés et commence par une lettre ou un point non suivi d'un chiffre. Des noms tels que ".2way" ne sont pas valides, pas plus que les mots réservés.

Tous les caractères non valides sont traduits en "."


De même, si vous devez sous-définir une variable avec un nom 'non valide' à l'aide de $, vous pouvez utiliser des backticks `. Par exemple: 

df$`Label 1`
57
Brandon Bertelsen

Vous pouvez modifier un nom de cadre de données existant pour qu'il contienne des espaces, par exemple en utilisant votre exemple.

x <- c(1:10,1:10,1:10,1:10,1:10,1:10,1:10,1:10,1:10,1:10)
df <- data.frame("Label 1"=x,"Label 2"=rnorm(100))
colnames(df) <- c("Label 1", "Label 2")
head(df, 3)

résultats

  Label 1    Label 2
1       1  0.2013347
2       2  1.8823111
3       3 -0.5233811

et vous pouvez toujours accéder aux colonnes en utilisant l'opérateur $, il vous suffit d'utiliser des guillemets doubles, par exemple

df$"Label 2"[1:3]

résultats

[1]  0.2013347  1.8823111 -0.5233811

Il me semble plutôt incohérent de convertir automatiquement les noms de colonne lors de la création de data.frame, mais de ne pas procéder de la même manière lors de la modification du nom de colonne, mais que R fonctionne actuellement.

5
Aaron Statham
names(df)<-c('Label 1','Label 2)
0
Tanmay