2012-10-07 21 views
5

Me gustaría agregar metadatos a mi hoja de cálculo como comentarios, y hacer que R los ignore después.read.table y comentarios en R

Mis datos son de la forma

v1,v2,v3, 
1,5,7, 
4,2,1,#possible error, 

(los que la excepción de que es mucho más largo. El primer comentario aparece en realidad bien fuera de las 5 primeras filas, utilizado por scan para determinar el número de columnas)

he estado tratando:

read.table("data.name",header=TRUE,sep=",",stringsAsFactors=FALSE,comment.char="#") 

Pero read.table (y, para el caso, count.fields) piensa que tengo un campo más de lo que realmente hago Mi marco de datos termina con una columna en blanco llamada 'X'. Creo que esto se debe a que mi programa de hoja de cálculo agrega comas al final de cada línea (como en el ejemplo anterior).

Usando flush=TRUE no tiene ningún efecto, a pesar de que (de acuerdo con el archivo de ayuda) que "[...] permite poner comentarios después de que el último campo [...]"

Usando colClasses=c(rep(NA,3),NULL) carece de efecto.

Podría simplemente eliminar la columna después, pero como parece que esta es una práctica común, me gustaría aprender a hacerlo correctamente.

Gracias,

Andrew

Respuesta

4

Su problema relacionado con el carácter de comentarios y el número de columnas de datos no están relacionados con read.table(), pero no a la hoja de cálculo (estoy usando Excel). El comportamiento predeterminado para read.table es tratar # como el comienzo de un comentario e ignorar lo que sigue. La razón por la que recibe un error es porque hay una coma al final de sus líneas de datos. Eso le dice a read.table que deben seguir más datos. La lectura de su original ejemplo:

> read.table(text="v1, v2, v3, 
+ 1,5,7, 
+ 4,2,1,#possible error,", sep=",", header=TRUE) 
    v1 v2 v3 X 
1 1 5 7 NA 
2 4 2 1 NA 

El comentario es ignorado por defecto y una cuarta columna se crea y X. etiquetada aquí se puede eliminar esta columna después del hecho o utilizar el método que @flodel menciona o se puede retirar el coma final antes de leer el archivo en R.En Excel, la coma final se agrega cuando guarda un archivo como csv (variables separadas por comas) porque el comentario aparece en la cuarta columna y Excel no lo reconoce como un comentario. Si guarda el archivo como separado del espacio, el problema desaparece (elimine el argumento sep = ya que el espacio es el separador predeterminado):

> read.table(text="v1 v2 v3 
+ 1 5 7 
+ 4 2 1#possible error", header=TRUE) 
    v1 v2 v3 
1 1 5 7 
2 4 2 1 
5

Desde el doc (?read.table):

colClasses carácter. Un vector de clases a suponer para las columnas. Reciclado según sea necesario, o si el vector de caracteres se nombra, los valores no especificados se toman como NA.

Los valores posibles son NA (valor predeterminado, cuando se utiliza type.convert), "NULL" (cuando se omite la columna), una de las clases de vectores atómicos (lógico, entero, numérico, complejo, carácter, sin formato) , o "factor", "Fecha" o "POSIXct". De lo contrario, debe haber un método como (desde los métodos del paquete) para la conversión de "carácter" a la clase formal especificada.

Tenga en cuenta que dice usar "NULL", no NULL. De hecho, esto funciona como se esperaba:

con <- textConnection(" 
v1,v2,v3, 
1,5,7, 
4,2,1,#possible error, 
") 

read.table(con, header = TRUE, sep = ",", 
      stringsAsFactors = FALSE, comment.char = "#", 
      colClasses = c(rep(NA, 3), "NULL")) 
# v1 v2 v3 
# 1 1 5 7 
# 2 4 2 1 
Cuestiones relacionadas