Si sa come è possibile fornire un vettore di nomi a un frame di dati per modificare i nomi di colonna o di riga di un dataframe. Esiste un metodo simile per fornire un vettore di nomi che altera la classe di ogni colonna in un dataframe? Puoi farlo quando leggi in un dataframe con read.table usando colClasses. Che dire se il dataframe viene creato all'interno di R?fornisce un vettore a "classi" di dataframe
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)
MODIFICA: Sono cambiato sontuosamente sopra in lapply perché non ha senso.
EDIT 2: Se c'è un modo per scrivere una funzione definita dall'utente che basterebbe così
@ Tommy speravo nella risposta "La tua droga è già una funzione base che lo fa facilmente". Le tue funzioni funzionano bene. Inserirò il mio .First() come funzione di convenienza per me stesso. In realtà sono un po 'sorpreso dal fatto che il team R-core non abbia già implementato qualcosa di simile, specialmente perché sembra essere parte di read.table. Grazie. –
@Tyler ho condiviso la tua sorpresa. Ho cercato a lungo una funzione di base per fare proprio questo, e di solito prendo qualche approccio ad hoc al volo. Sarebbe bello se il team R-core lo considerasse in base. – digitalmaps