Usted sabe cómo puede suministrar un vector de nombres a un marco de datos para cambiar los nombres de columna o fila de un marco de datos. ¿Existe un método similar para proporcionar un vector de nombres que altere la clase de cada columna en un marco de datos? Puede hacer esto cuando lea en un marco de datos con read.table usando colClasses. ¿Qué pasa si el marco de datos se crea dentro de R?suministra un vector a "clases" de marco de datos
DF <- as.data.frame(matrix(rnorm(25), 5, 5))
str(DF) #all numeric modes
names(DF) <- c("A", "A2", "B", "B2", "Z") #I want something like this for classes
some_classes_function_like_names(DF) <- c(rep("character", 3), rep("factor", 2))
#I can do it like this but this seems inefficient
DF[, 1:3] <- lapply(DF[, 1:3], as.character)
DF[, 4:5] <- lapply(DF[, 4:5], as.factor)
str(DF)
EDIT: He cambiado sapply arriba para lapply como sapply no tiene sentido.
EDIT 2: Si hay una manera de escribir una función definida por el usuario que sería suficiente, así
@ Tommy Esperaba la respuesta "Usted sabe que ya hay una función base que lo hace fácilmente". Tus funciones funcionan bien. Voy a incluirlo en mi .First() como una función de conveniencia para mí. De hecho, estoy un poco sorprendido de que el equipo R-core aún no haya implementado algo así, especialmente porque parece ser parte de read.table. Gracias. –
@Tyler Compartí tu sorpresa. Durante mucho tiempo he buscado una función de base para hacer esto, y por lo general tomo un enfoque ad hoc sobre la marcha. Sería genial si el equipo R-core considerara esto en la base. – digitalmaps