R: as.numeric函数从data.frame中无法正确返回#

10

可能是重复问题:
如何在R中将因子转换为整数、数字类型而不会丢失信息?

我正在使用read.xls导入Excel文件。我知道这个命令使用read.table并将所有内容返回为“factors”(因子)。由于所有列都具有以前的分类数据,我无法直接上传我的数据并告诉read.xls哪些列是数字列。因此,我一直在提取我想要的数值数据列,然后希望将它们从数据框(data.frames)转换为数字数据,但是当我使用as.numeric时,我得到的数字不对应原始数据。

例如:

以下是称为dfA1的数据框的前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个回答

18

你可以尝试:

as.numeric(as.character(dfA1))

你还可以通过使用 ?options 并设置 stringsAsFactors = FALSE 来防止自动将数据转换为因子类型。

这种情况发生的原因是因为因子类型实际上在内部被存储为整数,标签是在打印时显示出来的(例如在你的情况下是 "103316")。函数 as.numeric 认为你要的是底层的整数表示。


或者,您可以在Excel中打开文件并将列格式设置为数字。这应该可以清除对于R的翻译问题。 - Brandon Bertelsen
@Brandon - 是的,虽然我有点后悔回答这个问题,因为Joshua是正确的,它应该被关闭为完全重复。 - joran
现在我已经完成了这个步骤,当我尝试从其中一个单元格中呼叫一个号码时,我无法这样做。我创建了一个新的变量 A1 <- as.numeric(as.character(dfA1)),它产生了我所期望的正确数字 - 谢谢!但是当我尝试调用一个单元格比如A1(1,1)时,它会给出“错误:找不到函数“A1”的提示。有什么想法吗?再次感谢! - Amanda
@Amanda - 这听起来像是一个不同的问题,最好在一个新的问题中解决。但你应该先尝试阅读?'['(虽然这只是一个猜测...不确定你所说的“调用”是什么意思)。 - joran
1
@ Amanda - 这些评论并不是提供技术支持的合适场所。如果您认为您的问题非常快速/基础,可以尝试在 R 聊天室中提问(他们非常友好,诚实!),或者您可以在此处提出新问题。无论哪种方式,除非您相当清楚正在键入生成错误的命令,否则没有人能够提供帮助。 - joran
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接