varias superponer studio lineas graficos graficas r dataframe

superponer - R- ¿Por qué se agregan X a los nombres de las variables en mi marco de datos?



superponer graficas en r (3)

Cuando uso la función read.csv() en R para cargar datos, a menudo encuentro que se ha agregado una X a los nombres de variables. Creo que casi siempre lo veo en la primera variable, pero podría estar equivocado.

Al principio, pensé que R podría estar haciendo esto porque tenía un espacio al principio del nombre de la variable, no.

En segundo lugar, había leído en alguna parte que si tienes una variable que comienza con un número, o si es un nombre de variable muy corto, R agregaría la X. El nombre de la variable es todo texto y la longitud del nombre de esta variable es de 12 caracteres , así que no es corto.

Ahora, esto es puramente una molestia. Puedo cambiar el nombre de la columna, pero agrega un paso, aunque sea pequeño.

¿Hay alguna forma de evitar que esto X pícaro se infiltre en mi marco de datos?

Aquí está mi código original:

df <- read.csv("/file/location.filecsv", header=T, sep=",")

Aquí está la variable en cuestión:

str(orders) ''data.frame'': 2620276 obs. of 26 variables: $ X.OrderDetailID : Factor w/ 2620193 levels "(2620182 row(s) affected)",..: 105845


Como dijo Gabor, de manera predeterminada, read.csv útil para convertir los nombres en la fila de su encabezado para que sean nombres de variables válidos (use check.names = FALSE para desactivarlo). Esto se hace usando la función make.names . La página de ayuda para esa función explica qué constituye un nombre de variable válido.

Un nombre sintácticamente válido consta de letras, números y el punto o caracteres subrayados 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.

La lista de palabras reservadas se encuentra en la página de ayuda ?reserved .

La otra condición es que el nombre de la variable debe tener 10000 caracteres o menos, pero make.names no lo acortará. Así que tenga cuidado de ser realmente detallado con sus nombres de variables.

Puede verificar nombres de variables válidas usando

library(assertive.code) is_valid_variable_name(x)


Es un comportamiento sorprendente, pero creo que necesitaríamos un ejemplo reproducible. ¿Quizás tienes algunos caracteres invisibles / especiales escondidos en tu archivo?

names(read.csv(textConnection( "abcdefghijkl, a1,2x")))

se comporta bien ¿Puedes hacer un ejemplo en este sentido que demuestre tu problema?

Como se describe en la otra respuesta, check.names=FALSE es una posible solución. Puedes experimentar con make.names para determinar el comportamiento ...


read.table y read.csv tienen un argumento check.names= que puede establecer en FALSE .

Por ejemplo, inténtalo con esta entrada que consiste solo en un encabezado:

> read.csv(text = "a,1,b") [1] a X1 b <0 rows> (or 0-length row.names)

versus

> read.csv(text = "a,1,b", check.names = FALSE) [1] a 1 b <0 rows> (or 0-length row.names)