R:as.numeric函数没有从data.frame返回正确的# [重复]

Posted

技术标签:

【中文标题】R:as.numeric函数没有从data.frame返回正确的# [重复]【英文标题】:R: as.numeric function not returning correct # from data.frame [duplicate] 【发布时间】:2011-10-18 13:15:50 【问题描述】:

可能重复:R - How to convert a factor to an integer\numeric in R without a loss of information

我正在使用read.xls 导入一个excel 文档。我知道这个命令使用read.table 并将所有内容作为“因素”返回。我无法上传我的数据直接告诉read.xls 哪些列是数字,因为所有列都有以前的分类数据。所以我一直在提取我想要的数字数据列,然后想将它们从 data.frames 转换为数字数据,但是当我使用 as.numeric 时,我收到的数字与原始数据不对应。

例如:

这些是我的名为 dfA1 的 data.frame 的前 6 行,它是一个 96,1 向量

         [,1]
[1,] "103316"
[2,] "130720"
[3,] "141808"
[4,] "131864"
[5,] "148144"
[6,] "145760"

当我执行as.numeric(dfA1) 时,我收到:

[1]  2  18  29  19  43  40

我完全不知道为什么我会得到这些数字,也不知道它是如何得出这些数字的。我检查了我的原始 xls 文档,它们被标记为没有小数的数字。

【问题讨论】:

【参考方案1】:

你可以试试:

as.numeric(as.character(dfA1))

您还可以通过使用?options 设置stringsAsFactors = FALSE 来防止事物自动转换为因子。

发生这种情况的原因是因子实际上在内部存储为整数,而标签是您打印出来时实际显示的内容(在您的情况下为“103316”)。函数as.numeric 认为你想要的是底层整数表示。

【讨论】:

或者,您可以在 excel 中打开文件并将列格式化为数字。这应该清除 R 的翻译。 @Brandon - 是的,虽然我现在有点后悔回答这个问题,因为 Joshua 是正确的,它应该作为一个精确的 dup 关闭。 谢谢乔兰,工作就像一个魅力。我实际上尝试将 excel 中的列重新格式化为数字,但是由于某种原因并没有解决问题。 既然我已经这样做了,当我尝试从其中一个生成的单元格中拨打一个号码时,我无法这样做。我创建了一个新变量 A1 @Amanda - 这些 cmets 并不是扩展技术支持的真正合适场所。如果您认为您的问题非常快速/基本,您可以尝试在 R 聊天室中提问(他们非常友好、诚实!),或者您可以在这里提出新问题。无论哪种方式,除非您非常清楚正在输入的会产生错误的命令,否则没有人能够提供帮助。

以上是关于R:as.numeric函数没有从data.frame返回正确的# [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 R 中使用 as.numeric() 时如何避免数字舍入?

as.numeric() 删除 R 中的小数位,如何更改?

R 中的 as.numeric 有啥问题? [复制]

将大型平面文件读入 r as.numeric 的快速方法 [重复]

如何避免 as.numeric() 中的“警告消息:强制引入的 NA”[重复]

在不丢失信息的情况下将因子转换为数字 R(as.numeric() 似乎不起作用)[重复]