# To do it for all names
df[] <- lapply( df, factor) # the "[]" keeps the dataframe structure
col_names <- names(df)
# do do it for some names in a vector named 'col_names'
df[col_names] <- lapply(df[col_names] , factor)
Пояснение.Все фреймы данных являются списками, и результаты [
, используемые с аргументами с несколькими значениями, также являются списками, поэтому циклическая обработка списков является задачей lapply
.Приведенное выше назначение создаст набор списков, в которые функция data.frame.[<-
должна успешно вернуться в фрейм данных, df
Другая стратегия будет заключаться в преобразовании только тех столбцов, в которых количество уникальных элементов меньшечем некоторый критерий, скажем, меньше, чем журнал количества строк в качестве примера:
cols.to.factor <- sapply( df, function(col) length(unique(col)) < log10(length(col)) )
df[ cols.to.factor] <- lapply(df[ cols.to.factor] , factor)