2010-05-10 19 views
83

Estoy tratando de especificar las opciones colClasses en la función read.csv en R. En mis datos, la primera columna "tiempo" es básicamente un vector de caracteres mientras que el resto de las columnas son numéricas.Especificando colClasses en read.csv

data <- read.csv("test.csv", comment.char="" , 
       colClasses=c(time="character", "numeric"), 
       strip.white=FALSE) 

En el comando anterior, me gustaría R para leer en la columna "tiempo" como "carácter" y el resto como numéricos. Aunque, la variable "datos" tuvo el resultado correcto después de completar el comando, R devolvió las siguientes advertencias. Me pregunto cómo podría arreglar estas advertencias.

Warning messages: 
1: In read.table(file = file, header = header, sep = sep, quote = quote, : 
    not all columns named in 'colClasses' exist 
2: In tmp[i[i > 0L]] <- colClasses : 
    number of items to replace is not a multiple of replacement length 

Derek

Respuesta

69

El vector colClasses debe tener una longitud igual al número de columnas importados. Suponiendo que el resto de las columnas del conjunto de datos son 5:

colClasses=c("character",rep("numeric",5)) 
+7

uno probablemente puede usar lo siguiente para leer la primera línea del csv y determinar cuántas columnas hay. escanear (csv, sep = ',', what = "character", nlines = 1) – defoo

+22

Esto en realidad es una respuesta incorrecta y me echó por un tiempo. La respuesta correcta está abajo. No tratando de ser un imbécil, solo quería asegurarme de que no le pasara a nadie más. – Rob

+3

@Rob En mi caso, esta sigue siendo la respuesta correcta, cuando también necesita especificar las clases de las otras variables, y no son automáticamente reconocidas como tales por 'read.table'. – tchakravarty

11

Asumiendo que su columna de 'tiempo' tiene por lo menos una observación con un carácter no numérico y todas sus otras columnas sólo tienen números, luego 'de read.csv por defecto será leer en 'tiempo' como un 'factor' y todo el resto de las columnas como 'numérico'. Por lo tanto agrícola 'stringsAsFactors = F' tendrá el mismo resultado que el ajuste '' colClasses manualmente es decir,

data <- read.csv('test.csv', stringsAsFactors=F) 
130

puede especificar el colClasse sólo uno columnas.

Así que en su ejemplo, usted debe utilizar:

data <- read.csv('test.csv', colClasses=c("time"="character")) 
+17

No es que importe mucho, pero encontré que funciona sin mencionar el nombre de la columna. – Hendy

10

Si se desea hacer referencia a los nombres de la cabecera en lugar de números de columna, se puede usar algo como esto:

fname <- "test.csv" 
headset <- read.csv(fname, header = TRUE, nrows = 10) 
classes <- sapply(headset, class) 
classes[names(classes) %in% c("time")] <- "character" 
dataset <- read.csv(fname, header = TRUE, colClasses = classes) 
1

para múltiples Las columnas de fecha y hora sin encabezado y muchas columnas dicen que mis campos de fecha y hora están en las columnas 36 y 38, y quiero que se lean como campos de caracteres:

data<-read.csv("test.csv", head=FALSE, colClasses=c("V36"="character","V38"="character"))       
Cuestiones relacionadas