将data.frame列格式从字符转换为因子

将data.frame列格式从字符转换为因子,r,dataframe,character,r-faq,R,Dataframe,Character,R Faq,我想将data.frame对象mydf的某些列的格式类从character更改为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

我想将data.frame对象mydf的某些列的格式类从character更改为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参考手册:

R参考卡:

如果要在加载数据后将data.frame中的所有字符变量更改为factors,可以这样做,将其更改为data.frame,称为dat:


您可以使用的另一个短方法是从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_;如果要将选定的命名字符列转换为因子,则可以使用dplyr::mutate_:

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)

除非您需要自动识别列,否则我发现这是最简单的解决方案:

df$name <- as.factor(df$name)

这使得dataframe df中的列名成为一个因素。

mydf$myfavoritecolumn谢谢!但我还有一个问题。我有一个字符数组col_names[]中每一列的名称。我如何使用上面的命令mydf$col_names[I]不起作用。有没有办法对所有字符变量自动执行此操作,因为data.frame与stringsAsFactors一起执行此操作?@EtienneLow-Décarie:只需解锁并在结果上使用data.frame即可。谢谢!但我还有一个问题。我有一个字符数组col_names[]中每一列的名称。如何使用上述命令mydf$col_names[I]和mydf[,col_names[I]]都不起作用。@Rasoul,mydf[,col_names]将对refs执行+1操作。这是基本的东西,可以问,但也可以注意到在这些和类似的工作中投入了大量的工作。这是一个非常好的解决方案!它还可以处理列编号,如果您想更改许多列而不是所有列,那么这些列编号可能特别有用。例如,Colu_nums警告:如果lengthcol_names==1,则第一个解决方案不起作用。在这种情况下,df[,col_names]自动降级为一个向量,而不是长度为1的列表,然后lapply尝试对每个条目而不是整个列进行操作。这可以通过使用df[,col_names,drop=FALSE]来防止。这是一个很好的观点。另一种保留列表状态的调用是使用df[col_name]。每个字符变量到因子的完全转换通常在读取数据时发生,例如,使用stringsAsFactors=TRUE,但这在以下情况下很有用:,您已使用readxl包中的read_excel读取数据,并希望训练不接受字符变量的随机林模型。请使用更多信息进行编辑。不鼓励只编码并尝试此答案,因为它们不包含可搜索的内容,并且不解释为什么有人应该尝试此答案。我们在这里努力成为知识资源。如果我不想在我的df的所有列中使用它,请?我相信您需要双括号来实际提取列并将其更改为因子,例如。[[I]]
library(magrittr)

mydf$mycolumn %<>% factor
for (i in 1:ncol(data)){
    if(is.character(data[,i])){
        data[,i]=factor(data[,i])
    }
}
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)
df$name <- as.factor(df$name)