Я хотел бы изменить формат (класс) некоторых столбцов моего объекта mydf
(mydf
) от charactor к factor.
Я не хочу этого делать, когда читаю текстовый файл с read.table()
функции read.table()
.
Любая помощь будет оценена по достоинству.
Я хотел бы изменить формат (класс) некоторых столбцов моего объекта mydf
(mydf
) от charactor к factor.
Я не хочу этого делать, когда читаю текстовый файл с read.table()
функции read.table()
.
Любая помощь будет оценена по достоинству.
Привет, добро пожаловать в мир R.
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)
Если вы хотите изменить все символьные переменные в вашем файле data.frame после того, как вы уже загрузили свои данные, вы можете сделать это, как это, в data.frame под названием 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
Вы можете использовать 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)
Я делаю это с помощью функции. В этом случае я буду преобразовывать переменные символа в коэффициент:
for (i in 1:ncol(data)){
if(is.character(data[,i])){
data[,i]=factor(data[,i])
}
}