2010-08-05 14 views
21

Digamos que tengo un hoja.de.datos, así:Al especificar los nombres de las columnas en un data.frame se cambian los espacios a "."

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)

devuelve:

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

¿Cómo llego R para detener la sustitución de la automagicamente espacio con un punto en el nombre de la columna? es decir, "Etiqueta 1" en lugar de "Etiqueta.1".

Respuesta

9

No es así.

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 manejar un espacio. Así ver la función make.names() para obtener más información o un ejemplo:

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

Hrmmm, esto es para fines de salida. El data.frame no se usará para cálculos adicionales en este punto (es decir, va directamente a write.table()) –

+0

Es un requisito de idioma. Puede crear sus propias funciones de impresión bonitas que reemplazan * por salida * pero no puede cambiar la forma en que se crea el data.frame. –

+1

@Brandon, puede especificar 'col.names' en' write.table'. Algo como 'col.names = gsub (" \\. "," ", Colnames (df))' debería hacer el truco. –

4

Usted puede cambiar una nombres de tramas de datos existentes para contener espacios es decir, utilizando el 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) 

vuelve

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

y le todavía puede acceder a las columnas usando el operador $, solo necesita usar comillas dobles, por ejemplo

df$"Label 2"[1:3] 

vuelve

[1] 0.2013347 1.8823111 -0.5233811 

Parece bastante inconsistente me nombres de las columnas de auto-convertir en hoja.de.datos creación, pero no a hacer lo mismo en nombre de la columna alteración, pero eso es cómo trabaja en el R momento.

40

Es posible establecer check.names = FALSE en data.frame (así como en read.table):

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

devuelve:

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

De ?data.frame:

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


De ?make.names:

Un nombre válido sintácticamente se compone de letras, números y el punto o subrayar caracteres 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 convierten a "."


Además, si necesita un subconjunto una variable con el nombre de 'no válido' usando $, puede utilizar acentos abiertos `. Por ejemplo:

df$`Label 1` 
Cuestiones relacionadas