Especificación de colClasses en read.csv
(5)
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.
data <- read.csv("test.csv", comment.char="" ,
colClasses=c(time="character", "numeric"),
strip.white=FALSE)
En el comando anterior, quisiera que R lea en la columna "tiempo" como "carácter" y el resto como numérico. 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
Asumiendo que su columna de "tiempo" tiene al menos una observación con un carácter no numérico y todas sus otras columnas solo tienen números, entonces ''valor predeterminado de read.csv será leer en'' tiempo ''como un'' factor ''y todo el resto de las columnas como ''numéricas''. Por lo tanto, establecer ''stringsAsFactors = F'' tendrá el mismo resultado que configurar ''colClasses'' manualmente, es decir,
data <- read.csv(''test.csv'', stringsAsFactors=F)
El vector colClasses debe tener una longitud igual al número de columnas importadas. Suponiendo que el resto de las columnas de su conjunto de datos son 5:
colClasses=c("character",rep("numeric",5))
Para varias columnas de fecha y hora sin encabezado y muchas columnas, supongamos 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"))
Puede especificar colClasse para solo una columna.
Entonces en tu ejemplo deberías usar:
data <- read.csv(''test.csv'', colClasses=c("time"="character"))
Si desea consultar los nombres del encabezado en lugar de los números de columna, 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)