我想将数据框对象(mydf
)的某些列的格式(class)从字符(charactor)改为 因子(factor)。
我不想在使用read.table()
函数读取文本文件时进行此操作。
任何帮助都将不胜感激。
我想将数据框对象(mydf
)的某些列的格式(class)从字符(charactor)改为 因子(factor)。
我不想在使用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
mydf$col_names[i]
也不是mydf[,col_names[i]]
)? - Rasoul# To do it for all names
df[] <- lapply( df, factor) # the "[]" keeps the dataframe structure
# to do it for some names in a vector named 'col_names'
col_names <- names(df)
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)
length(col_names)==1
,第一种解决方案将无法正常工作。在这种情况下,df[,col_names]
会自动降级为长度为1的向量,而不是列表,然后 lapply
尝试对每个条目进行操作,而不是整个列。可以通过使用 df[,col_names,drop=FALSE]
来避免这种情况。 - P Schnelldf[col_names]
。 - IRTFM你可以使用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)
mutate_at
非常快。 - emr2如果你想在加载完数据之后将数据框中的所有字符变量都改成因子变量,可以像这样操作,假设数据框名为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
)
stringsAsFactors = TRUE
,但是当您使用readxl
包中的read_excel()
读取数据并想要训练不接受字符变量的随机森林模型时,这非常有用。 - Sam Firke你可以使用magrittr包中的管道符(%<>%
)来将字符列mycolumn转换为因子。这是另一种简短的方法。
library(magrittr)
mydf$mycolumn %<>% factor
我使用一个函数来完成这个操作。在这种情况下,我只将字符变量转换为因子变量:
for (i in 1:ncol(data)){
if(is.character(data[,i])){
data[,i]=factor(data[,i])
}
}
[[i]]
。 - RTrain3kdf$name <- as.factor(df$name)
这使得数据框 df
中的列 name
成为一个因子。
dplyr
1.0.0 来使用 across
。library(dplyr)
df <- mtcars
#To turn 1 column to factor
df <- df %>% mutate(cyl = factor(cyl))
#Turn columns to factor based on their type.
df <- df %>% mutate(across(where(is.character), factor))
#Based on the position
df <- df %>% mutate(across(c(2, 4), factor))
#Change specific columns by their name
df <- df %>% mutate(across(c(cyl, am), factor))