预防方法
在数据处理过程中,时常会自动将字符串转变为因子,这对于后续的操作可能会带来困难。为避免此类麻烦,可以在程序中声明禁止chr转为factor
1
|
options(stringsAsFactors = FALSE) #禁止chr转成factor
|
解决方案
若已经出现了这样的问题,或数据就是如此,我们应该如何处理呢
若直接使用as.numeric()
函数则会将factor的不同level转换为对相应的数值,举例如下
1
2
3
4
5
6
7
8
|
> directions <- c("North", "East", "South", "South")
> directions.factor <- factor(directions)
> directions.factor
[1] North East South South
Levels: East North South
# 直接转换会得到factor levels对应的numeric codes
> as.numeric(directions.factor)
[1] 2 1 3 3
|
若我们的factor
本身就是数字,直接使用as.numeric()
转换,则会丢失其原本的数值信息,而这往往不是我们想要的结果。因此,我们可以使用varhandle
提供的unfactor()
函数来方便地转换。
1
2
3
|
# install.package("varhandle")
libarary(varhandle)
unfactor(your_factor_variable)
|
参考来源
https://stackoverflow.com/questions/3418128/how-to-convert-a-factor-to-integer-numeric-without-loss-of-information
https://www.dummies.com/programming/r/how-to-convert-a-factor-in-r/