如何将data.frame列从因子转换为数字

bir*_*rdy 29 r

我有一个data.frame类列Factor.我想将它转换为数字,以便我可以使用相关矩阵.

> str(breast)
'data.frame':   699 obs. of  10 variables:
 ....
 $ class                   : Factor w/ 2 levels "2","4": 1 1 1 1 1 2 1 1 1 1 ...
> table(breast$class)
  2   4 
458 241
> cor(breast)
Error in cor(breast) : 'x' must be numeric
Run Code Online (Sandbox Code Playgroud)

如何将Factor列转换为数字列?

akr*_*run 86

breast$class <- as.numeric(as.character(breast$class))
Run Code Online (Sandbox Code Playgroud)

如果要转换为许多列 numeric

indx <- sapply(breast, is.factor)
breast[indx] <- lapply(breast[indx], function(x) as.numeric(as.character(x)))
Run Code Online (Sandbox Code Playgroud)

另一种选择是stringsAsFactors=FALSE在使用read.table或读取文件时使用read.csv

以防万一,创建/更改列的其他选项

 breast[,'class'] <- as.numeric(as.character(breast[,'class']))
Run Code Online (Sandbox Code Playgroud)

要么

 breast <- transform(breast, class=as.numeric(as.character(breast)))
Run Code Online (Sandbox Code Playgroud)


Bro*_*ieG 10

来自?factor:

要将因子f转换为大约其原始数值,as.numeric(levels(f))[f]建议使用效率略高于as.numeric(as.character(f)).


Gre*_*now 6

这是FAQ 7.10.其他人已经展示了如何将其应用于数据框中的单个列或数据框中的多个列.但这确实是治疗症状,而不是治愈原因.

更好的方法是使用colClasses参数read.table和相关函数告诉R该列应该是数字,以便它永远不会创建因子并创建数字.这将放入NA任何不转换为数字的值.

另一个更好的选择是弄清楚为什么R不能将列识别为数字(通常是该列中某处的非数字字符)并修复原始数据,以便在不需要创建NAs的情况下正确读取它.

最好的是最后2的组合,确保数据是正确的阅读之前,指定colClasses所以R没有需要猜测(这样可以加快阅读为好).