Pregunta

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éricos.

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

En el comando anterior, yo querría R para leer en la columna "tiempo" como "carácter" y el resto como numéricos. Aunque, la variable "datos" tenía el resultado correcto después de que el comando se ha completado, R devolvió las siguientes advertencias. Me pregunto cómo podría solucionar estos avisos?

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

¿Fue útil?

Solución

Los colClasses vector 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))

Otros consejos

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

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, a continuación, 'por defecto de read.csv será leer en el 'tiempo' como un 'factor' y todos 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)

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)

En varias columnas de fecha y hora sin cabecera, y una gran cantidad de columnas, dicen mis campos de fecha y hora están en las columnas 36 y 38, y quiero que leen en los campos de caracteres como:

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

Sé OP preguntó acerca de la función utils::read.csv, pero permítanme dar una respuesta a estos que vienen aquí en busca cómo hacerlo usando readr::read_csv del tidyverse.

read_csv ("test.csv", col_names=FALSE, col_types = cols (.default = "c", time = "i"))

Esto debe establecer el tipo por defecto para todas las columnas como carácter , mientras que tiempo se pueda analizar como un número entero.

Si combinamos lo que contribuyó @Hendy y @Oddysseus Ithaca, obtenemos más limpio y una más general (es decir, adaptables?) Trozo de código.

    data <- read.csv("test.csv", head = F, colClasses = c(V36 = "character", V38 = "character"))                        
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top