在R中是否有一个简短的替代as.numeric(as.character(my.factor))的方法?

在R中是否有一个简短的替代as.numeric(as.character(my.factor))的方法?,r,vector,numeric,R,Vector,Numeric,如果我想得到R中某个因子的数值,我已经厌倦了将写成.numeric(as.character(my.factor))了。虽然它可以工作,但代码的作用并不明显,将数字转换成字符串,然后再回来处理它们,感觉是完全错误的。有没有像factor.values(my.factor)这样更简单、更自解释的方法 有人建议将其打包到自定义函数中,如 factor.values=function(x)as.numeric(levels(x))[x]#获取带有数字标签的因子的实际值 此解决方案的问题是,如果要让协

如果我想得到R中某个因子的数值,我已经厌倦了将
写成.numeric(as.character(my.factor))
了。虽然它可以工作,但代码的作用并不明显,将数字转换成字符串,然后再回来处理它们,感觉是完全错误的。有没有像
factor.values(my.factor)
这样更简单、更自解释的方法

有人建议将其打包到自定义函数中,如

factor.values=function(x)as.numeric(levels(x))[x]#获取带有数字标签的因子的实际值
此解决方案的问题是,如果要让协作者复制,则必须在脚本之间复制粘贴。我在问是否有一个简单的内置方法来实现这一点。我知道这是一个非常小的问题,但由于这是一个经常出现的问题,许多人发现通常提出的解决方案违反直觉,我还是提出了它

问题 Fpr单元化后,如果您有一个因子并希望对其进行数值运算,则会遇到许多问题:

>my.factor=系数(c(1,1,2,5,8,13,21))
>求和(我的因子)#让我们尝试一个数字运算
汇总系数中的错误(1:6,na.rm=FALSE):
总和对因子没有意义
>as.numeric(my.factor)#哦,让我们把它变成数字吧。
[1] 123456#啊!级别是数字而不是值
>as.character(my.factor)#因为网络告诉我这一点。
[1] “1”“1”“2”“5”“8”“13”“21”#更近一些。。。
>as.numeric(as.character(my.factor))#不短也不自明!
[1] 1 1 2 5 8 13 21#最后我们可以总结。。。
>总和(作为数字(作为字符(我的系数)))
[1] 51

来自
?系数

将因子“f”转换为其近似值 建议使用原始数值“as.numeric(levels(f))[f]” 并且比“as.numeric(as.character(f))”稍微高效一些


根据我的经验,只有在数据导入出现问题时,您才需要此功能。解决方案通常是修复导入步骤。数字信息不应该是一个开始的因子。是的,但是像
mapvalues
这样的便捷函数会无缘无故地从数字数据中提取因子。所以我经常发现自己在使用它,只要围绕“丑陋”的代码编写一个简单的包装函数,就可以了。你自己做其实没什么大不了的。你能提供一个
mapvalues
的例子“无缘无故地利用数字数据制作因子”吗?对我来说,一开始不使用因子更简单,但如果你已经有了它们,这里有一个替代plyr的方法:
df.target$x谢谢你的信息。但在语法方面,它变得更加复杂,尤其是在处理data.frames时。将
as.numeric(as.character(mydf$column))
as.numeric(levels(mydf$column))[mydf$column]
进行比较,然后将复杂语法放入函数中。这就是函数的用途。可能是因为我太习惯python了,也就是说,代码实际上很漂亮。但我希望有比在我写的每一个脚本中复制/源代码的函数更漂亮的东西。嗯,也许我的期望太高了。@JonasLindeløv:你不必在你写的每一个脚本中都复制/编写这个函数。这就是包裹的用途。。。或者,您可以将其源代码放在与.Rprofile中的搜索路径相连的环境中。说“代码实际上很漂亮”是主观的。您觉得漂亮的代码可能对其他人没有吸引力。出于这个原因,我认为投票结束这个项目是“主要基于意见的”(也就是说,哪个“漂亮”版本是“最好的漂亮版本”?)。我的观点是正确的。我已经更新了这个问题,是否有一个更简短、更直观(不太迂回)的解决方案,而不是一个“漂亮”的解决方案,因为这就是我的意思。答案似乎是“不”,我接受这个答案。将它放在我自己的环境中的问题是,当您与其他人共享脚本时,它会引发问题。我也用这个请求更新了这个问题。