Especificar nombres de columna en un data.frame cambia los espacios a “.”

Digamos que tengo un data.frame, así:

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

cabeza (df, 3)

devoluciones:

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

¿Cómo logro que R deje de reemplazar automágicamente el espacio con un punto en el nombre de la columna? es decir, “Etiqueta 1” en lugar de “Etiqueta.1”.

Tu no

Con el espacio que desee, el formato no satisfaría los requisitos para un identificador que entre en juego cuando use df$column.1 , que no podría hacer frente a un espacio. Así que vea la función make.names() para más detalles o un ejemplo:

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

Puede establecer check.names = FALSE en data.frame (y también en read.table ):

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

devoluciones:

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

Desde ?data.frame :

check.names
lógico. Si es TRUE se verifican los nombres de las variables en el dataframe para garantizar que sean nombres de variables sintácticamente válidos y que no estén duplicados. Si es necesario, se ajustan (por make.names ) para que así sea.


Desde ?make.names :

Un nombre sintácticamente válido consiste en letras, números y los caracteres de punto o subrayado y comienza con una letra o el punto no seguido de un número. Los nombres como ".2way" no son válidos, y tampoco lo son las palabras reservadas.

Todos los caracteres no válidos se traducen a " . "


Además, si necesita subconjuntar una variable con un nombre 'inválido' utilizando $ , puede usar los backticks ` . Por ejemplo:

 df$`Label 1` 

Puede cambiar los nombres de marcos de datos existentes para que contengan espacios, es decir, utilizando su ejemplo

 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) 

devoluciones

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

y aún puede acceder a las columnas usando el operador $, solo necesita usar comillas dobles, por ejemplo

 df$"Label 2"[1:3] 

devoluciones

 [1] 0.2013347 1.8823111 -0.5233811 

Me parece bastante inconsistente convertir automáticamente los nombres de las columnas en la creación de data.frame, pero no hacer lo mismo durante la alteración del nombre de la columna, pero así es como funciona R en este momento.

    Intereting Posts