将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]) } }