将data.frame列格式从字符转换为factor
我在R语言编程。 我想改变我的data.frame对象( mydf
)从字符的一些列的格式(类)的因素 。 当我通过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
这也适用于字符,date,整数和其他类
既然你是R的新手,我build议你看看这两个网站:
R参考手册: http : //cran.r-project.org/manuals.html
R参考卡: http : 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
的任务。 上面的分配会创build一组列表,表示函数data.frame.[<-
应该成功地插入数据框, df
另一个策略是只转换那些唯一项数量less于某个标准的列,比如说less于行数的日志,例如:
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中的所有字符variables改为因子,你可以这样做,到一个名为dat
的data.frame:
character_vars <- lapply(dat, class) == "character" dat[, character_vars] <- lapply(dat[, character_vars], as.factor)
这将创build一个向量来标识哪些列是类character
,然后将as.factor
应用于这些列。
示例数据:
dat <- data.frame(var1 = c("a", "b"), var2 = c("hi", "low"), var3 = c(0, 0.1), stringsAsFactors = FALSE )
另一个可以使用的简单方法是使用magrittr包中的pipe道( %<>%
)。 它将字符列mycolumn转换为一个因子。
library(magrittr) mydf$mycolumn %<>% factor
我用一个函数来做。 在这种情况下,我只会将字符variables转换为因子:
for (i in 1:ncol(data)){ if(is.character(data[,i])){ data[,i]=factor(data[,i]) } }