Tengo un problema al usar data.table: ¿Cómo convierto clases de columna? Aquí hay un ejemplo simple: con data.frame no tengo problemas para convertirlo, con data.table simplemente no sé cómo:
df <- data.frame(ID=c(rep("A", 5), rep("B",5)), Quarter=c(1:5, 1:5), value=rnorm(10))
#One way: http://stackoverflow.com/questions/2851015/r-convert-data-frame-columns-from-factors-to-characters
df <- data.frame(lapply(df, as.character), stringsAsFactors=FALSE)
#Another way
df[, "value"] <- as.numeric(df[, "value"])
library(data.table)
dt <- data.table(ID=c(rep("A", 5), rep("B",5)), Quarter=c(1:5, 1:5), value=rnorm(10))
dt <- data.table(lapply(dt, as.character), stringsAsFactors=FALSE)
#Error in rep("", ncol(xi)) : invalid 'times' argument
#Produces error, does data.table not have the option stringsAsFactors?
dt[, "ID", with=FALSE] <- as.character(dt[, "ID", with=FALSE])
#Produces error: Error in `[<-.data.table`(`*tmp*`, , "ID", with = FALSE, value = "c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2)") :
#unused argument(s) (with = FALSE)
¿Me pierdo algo obvio aquí?
Actualización debido a la publicación de Matthew: utilicé una versión anterior antes, pero incluso después de actualizar a 1.6.6 (la versión que uso ahora) todavía recibo un error.
Actualización 2: Digamos que quiero convertir cada columna de la clase "factor" en una columna de "carácter", pero no sé de antemano qué columna es de qué clase. Con un data.frame, puedo hacer lo siguiente:
classes <- as.character(sapply(df, class))
colClasses <- which(classes=="factor")
df[, colClasses] <- sapply(df[, colClasses], as.character)
¿Puedo hacer algo similar con data.table?
Actualización 3:
sessionInfo () R versión 2.13.1 (2011-07-08) Plataforma: x86_64-pc-mingw32 / x64 (64 bits)
locale:
[1] C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] data.table_1.6.6
loaded via a namespace (and not attached):
[1] tools_2.13.1
#Produces error
. +1 de todos modos. No recibo ningún error, ¿qué versión tienes? Sin embargo, hay un problema en esta área, se ha planteado antes, FR # 1224 y FR # 1493 son de alta prioridad para abordar. Sin embargo, la respuesta de Andrie es la mejor manera.
invalid times argument
error? Funciona bien para mi. ¿Qué versión tienes?
data.table
métodos son diferentes a los que son para ellosdata.frame