La specifica dei nomi di colonna in un data.frame cambia spazi in “.”

Diciamo che ho un data.frame, in questo modo:

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)) 

testa (df, 3)

ritorna:

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

Come posso ottenere che R interrompa automaticamente la sostituzione dello spazio con un punto nel nome della colonna? cioè “Etichetta 1” anziché “Etichetta.1”.

Non lo fai.

Con lo spazio che desideri, il formato non soddisfa i requisiti per un identificatore che viene riprodotto quando si utilizza df$column.1 – che non è in grado di df$column.1 uno spazio. Quindi vedi la funzione make.names() per i dettagli o un esempio:

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

Puoi impostare check.names = FALSE in data.frame (come pure in read.table ):

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

ritorna:

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

Da ?data.frame :

check.names
logico. Se TRUE i nomi delle variabili nel frame dei dati vengono controllati per garantire che siano nomi di variabili validi sintatticamente e non duplicati. Se necessario, vengono regolati (da make.names ) in modo che lo siano.


Da ?make.names :

Un nome sintatticamente valido è composto da lettere, numeri e punti o caratteri di sottolineatura e inizia con una lettera o il punto non seguito da un numero. Nomi come ".2way" non sono validi e nemmeno le parole riservate.

Tutti i caratteri non validi sono tradotti in " . "


Inoltre, se hai bisogno di subsetare una variabile con un nome 'non valido' usando $ , puoi usare backtick ` . Per esempio:

 df$`Label 1` 

È ansible modificare i nomi di frame di dati esistenti per contenere spazi, ad esempio utilizzando il proprio esempio

 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) 

ritorna

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

e puoi ancora accedere alle colonne usando l'operatore $, devi solo usare le virgolette doppie es

 df$"Label 2"[1:3] 

ritorna

 [1] 0.2013347 1.8823111 -0.5233811 

Sembra piuttosto incoerente per me convertire automaticamente i nomi delle colonne sulla creazione di data.frame, ma non fare lo stesso durante l'alterazione del nome della colonna, ma questo è il modo in cui R funziona al momento.