【问题标题】:why value changed after I convert the variable from factor to numeric为什么在我将变量从因子转换为数字后值发生了变化
【发布时间】:2019-09-10 07:44:25
【问题描述】:

在我将 csv 文件导入 R 后,我注意到变量“MFR”被 R 读取为因子,但实际上它应该是数字。

head(FY18ADM)



      SKU1    SKU2    SKU3      MFR   FY
1 TF018AAE HA158AC HM610AC 4,485.18 FY18
2 TF018AAE HA156AC HM610AC 4,485.18 FY18
3 H7P74BAE HA158AC    <NA> 2,409.75 FY18
4 H7P74BAE HA156AC    <NA> 2,409.75 FY18
5 TF198AAE HA156AC HM610AC 9,652.60 FY18
6 TF201AAE HA156AC HM610AC 4,147.60 FY18

str(FY18ADM)

...
$ MFR      : Factor w/ 57996 levels "-0.01","-0.02",..: 37684 37684 21073 21073 56149 36574 50464 55246 44319 27316 ...

我将此变量“MFR”从因子转换为数值。然后值发生了变化,这很奇怪。有谁知道为什么值会改变?

FY18ADM$MFR <- as.numeric(as.factor(FY18ADM$MFR))
head(FY18ADM)

      SKU1    SKU2    SKU3   MFR   FY
1 TF018AAE HA158AC HM610AC 37684 FY18
2 TF018AAE HA156AC HM610AC 37684 FY18
3 H7P74BAE HA158AC    <NA> 21073 FY18
4 H7P74BAE HA156AC    <NA> 21073 FY18
5 TF198AAE HA156AC HM610AC 56149 FY18
6 TF201AAE HA156AC HM610AC 36574 FY18

为了解决这个问题,我不得不将 csv 文件中的数据类型更改为货币。我相信在 R 中应该有办法做到这一点。非常感谢您的帮助!

【问题讨论】:

  • R 不知道如何将“4,485.18”强制转换为数字,因此它返回了与该特定因子水平相关的基础值 (37684)。很常见的错误。
  • 如果您使用readr::read_csv(),它应该检测MFR 列并将其格式化为数字。如果没有,您可以指定cols(MFR = col_number())

标签: r


【解决方案1】:

在将 csv 文件读入 R 后尝试 as.numeric(gsub(",", "", FY18ADM$MFR))。这将替换 MFR 变量中的逗号。

无需使用as.factor

【讨论】:

  • 谢谢。我刚试过:FY18ADM$MFR
  • 我试过 as.numeric(gsub(",", "", FY18ADM$MFR)) 现在可以了。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-18
  • 1970-01-01
相关资源
最近更新 更多