преобразовать данные.формат столбца кадра от символа к фактору
я программирую на языке R. Я хотел бы изменить формат (класс) некоторые столбцы данных.объект кадра (mydf
) от характер до фактор. Я не хочу этого делать, когда я читаю текстовый файл по
6 ответов:
привет, добро пожаловать в мир Р.
mtcars #look at this built in data set str(mtcars) #allows you to see the classes of the variables (all numeric) #one approach it to index with the $ sign and the as.factor function mtcars$am <- as.factor(mtcars$am) #another approach mtcars[, 'cyl'] <- as.factor(mtcars[, 'cyl']) str(mtcars) # now look at the classes
Это также работает для символов, дат, целых чисел и других классов
поскольку вы новичок в R, я предлагаю вам взглянуть на эти два сайта:
R справочники: http://cran.r-project.org/manuals.html
R справочная карта:http://cran.r-project.org/doc/contrib/Short-refcard.pdf
# 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)
если вы хотите изменить все символьные переменные в ваших данных.кадр к факторам после того, как вы уже загрузили свои данные, вы можете сделать это так, чтобы данные.кадр называется
dat
:character_vars <- lapply(dat, class) == "character" dat[, character_vars] <- lapply(dat[, character_vars], as.factor)
Это создает вектор, определяющий, какие столбцы имеют класс
character
, затем применяетas.factor
к этим колонкам.пример данных:
dat <- data.frame(var1 = c("a", "b"), var2 = c("hi", "low"), var3 = c(0, 0.1), stringsAsFactors = FALSE )
еще один короткий способ вы могли бы использовать это труба (
%<>%
) от magrittr пакета. Он преобразует столбец символов mycolumn к-фактор.library(magrittr) mydf$mycolumn %<>% factor
Я делаю это с помощью функции. В этом случае я буду преобразовывать только символьные переменные в фактор:
for (i in 1:ncol(data)){ if(is.character(data[,i])){ data[,i]=factor(data[,i]) } }
вы могли бы использовать
dplyr::mutate_if()
для преобразования всех символьных столбцов илиdplyr::mutate_at()
для выбора именованных символьных столбцов к факторам:library(dplyr) # all character columns to factor: df <- mutate_if(df, is.character, as.factor) # select character columns 'char1', 'char2', etc. to factor: df <- mutate_at(df, vars(char1, char2), as.factor)