R中是否有as.numeric(as.character(my.factor))的简短替代?

时间:2014-12-13 13:50:50

标签: r vector numeric

如果我想在R中得到一个因子的数值,我已经厌倦了写as.numeric(as.character(my.factor))。尽管它有效,但代码的作用并不是不言而喻的,将数字转换为字符串然后再用它们做任何事情。是否有更简单,更自我解释的方式,如factor.values(my.factor)

有人建议将其打包在像

这样的自定义函数中
factor.values = function(x) as.numeric(levels(x))[x]  # get the actual values of a factor with numeric labels

此解决方案的问题在于,如果协作者可以重现它,则必须在脚本之间进行复制粘贴。我问是否有一个简短的内置方法来做到这一点。我知道这是一个非常小的问题,但由于它是一个常见的问题而很多人发现这种常见的解决方案具有反直觉性,所以无论如何我都会提出它。

问题

Fpr单位,如果你有一个因素,并想对它进行数值运算,你会遇到很多问题:

   > my.factor = factor(c(1, 1, 2, 5, 8, 13, 21))
    > sum(my.factor)  # let's try a numeric operation
    Error in Summary.factor(1:6, na.rm = FALSE) : 
      sum not meaningful for factors
    > as.numeric(my.factor)  # oh, let's make it numeric then.
    [1] 1 1 2 3 4 5 6  # argh! levels numbers and not values
    > as.character(my.factor)  # because the web told me so.
    [1] "1"  "1"  "2"  "5"  "8"  "13" "21"  # closer...
    > as.numeric(as.character(my.factor))  # NOT short or self-explanatory!
    [1]  1  1  2  5  8 13 21  # finally we can sum ...
    > sum(as.numeric(as.character(my.factor)))
    [1] 51

1 个答案:

答案 0 :(得分:3)

来自?factor

  

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