因子到数值的转换

Posted

技术标签:

【中文标题】因子到数值的转换【英文标题】:Conversion of factor to numeric 【发布时间】:2014-06-25 16:05:33 【问题描述】:

我试图将我的数据框 (frost) 的一列 (X.2) 从因子转换为数值。当我只尝试X.2 而不是frost$X.2 它似乎工作但当 我问str(frost)这个专栏还是一个因素。

frost=read.csv2("Database_REL_Umea_aktuell.csv")
frost

as.numeric(as.character(frost$X.2))
[1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [28] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [55] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [82] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[109] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[136] NA NA
Warning message:
NAs introduced by coercion

str(frost)

'data.frame':   137 obs. of  6 variables:
 $ Database.frost.damage.Umea: Factor w/ 7 levels "","Hylocomium splendens (HS)",..: 1 5 3 3 3 3 3 3 3 3 ...
 $ X                         : Factor w/ 5 levels "","C","SR1","SR10",..: 1 5 4 4 4 4 4 4 4 4 ...
 $ X.1                       : Factor w/ 11 levels "","C-1","C-2",..: 1 5 9 9 9 10 10 10 11 11 ...
 $ X.2                       : Factor w/ 136 levels "","0,012573",..: 1 136 110 99 129 105 82 112 94 69 ...
 $ X.3                       : Factor w/ 5 levels "","a","b","c",..: 1 5 2 3 4 2 3 4 2 3 ...
 $ X.4                       : logi  NA NA NA NA NA NA ...

有没有人不知道为什么它不起作用? 感谢您的帮助!

【问题讨论】:

欢迎来到 ***!请阅读有关how to ask a good question 的信息以及如何生成minimal reproducible example。这将使其他人更容易帮助您。 为什么不在您对read.csv2 的调用中使用stringsAsFactors = FALSE?此外,如果该列确实是数字,R 会将其读取为数字。这使我相信您在该列中有非数值。如果数据正确读入 R,则没有理由必须这样做。 读取数据时使用dec = "," @RomanLuštrik , read.csv2() 应该解决这个问题。 @BenBolker 好点。那时正在发生一些奇怪的事情。 【参考方案1】:

当你输入这个时,

as.numeric(as.character(frost$X.2))

它不会更改数据框中的任何内容,它只是将其打印在屏幕上。

就您获得 NA 的原因而言,您似乎有几个空白观察或“X,XXXX”形式的观察,当您执行此操作时将转换为 NA。

所以尝试将它们转换为“X.XXX”的形式,然后再转换为数字:

frost$X.2 <- sapply(sapply(frost$X.2, gsub, patt=",", replace="."), as.numeric)

【讨论】:

这并不能解决他的问题。在运行as.numeric(as.character(frost$X.2)) 时,他的所有值都得到了NAs 同意,有限的信息很难,但继续编辑我的答案,就如何解决这个问题提出建议,因为 str() 的输出提供了一些线索!

以上是关于因子到数值的转换的主要内容,如果未能解决你的问题,请参考以下文章

将因子变量分钟:秒转换为R中的数值变量分钟.秒

R语言as.numeric函数将因子变量(factor)转化为数值变量(Numeric)

R语言dplyr包recode函数recode_factor函数数值或因子替换实战

如何在R中找到数值变量和因子变量之间的相关性?

R语言可视化包ggplot2绘制排序条形图实战:按照分类因子排序按照数值排序

无法将值从因子转换为仅数字