将因子转换为整数。

67

我正在使用reshape包操作数据框。在使用melt函数时,它将我的值列因子化了,这是一个问题,因为我想对其中的一些整数进行运算。

有人知道如何将因子强制转换为整数吗?使用as.character()会将其转换为正确的字符,但我无法立即对其执行操作,而as.integer()as.numeric()会将其转换为系统存储该因子的数字,这并不方便。

谢谢!

Jeff


2
这类似于https://dev59.com/U3A75IYBdhLWcg3wOGLS - Aaron left Stack Overflow
这个问题与重复的问题不同。许多人从顶部答案中得到NAs(请参见评论)。在那篇文章中有效的答案位于中间(https://dev59.com/U3A75IYBdhLWcg3wOGLS#42399425),但被声明为不属于该帖子。我建议将其添加到此帖子中。为了解决如此简单的问题浪费了太多时间。 - luchonacho
1
@luchonacho 如果缺失值是这个问题的关键问题,那么应该在问题中提到。我没有看到“很多人”,我只看到一些关于未被提及的非数字值或完全不同用例的评论,就像你链接的答案一样。如果您想要一个新的问题,重点是处理NAs和/或非数字字符串,那么您应该发布一个。 - camille
2个回答

80

引用 factor 的帮助页面上的直接说法:

要将因子 f 转换回其原始数值,推荐使用 as.numeric(levels(f))[f],它比 as.numeric(as.character(f)) 稍微更有效率一些。


68

你可以将两个函数结合起来;先转换为字符,然后再转换为数字:

> fac <- factor(c("1","2","1","2"))
> as.numeric(as.character(fac))
[1] 1 2 1 2

我尝试了这个,但是我收到了警告信息:“强制引入NAs。”这是什么意思? - Jeff Erickson
这是否意味着它们中的一些一开始就不是数字? - Jeff Erickson
1
@Jeff 这意味着一些字符不是数字,因此当您使用 as.numeric(....) 时,它们会被转换为 NA。查看 levels(fac)as.numeric(levels(fac)),将 fac 替换为您的因子变量,以查看哪些被强制转换为 NA - Gavin Simpson
你可以使用 Hablar 中的 convert() 函数来完成此操作。df %>% convert(num(column_name)) 可以安全地将因子转换为数字。 - davsjob

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