用数值替换因子

时间:2015-12-03 06:10:10

标签: r

我有一个数据框,其中每列都是类型因子,并且有超过3000个级别。 有没有办法我可以用数值替换每个级别。 考虑内置数据框InsectSprays

> str(InsectSprays)
'data.frame':   72 obs. of  2 variables:
 $ count: num  10 7 20 14 14 12 10 23 17 20 ...
 $ spray: Factor w/ 6 levels "A","B","C","D",..: 1 1 1 1 1 1 1 1 1 1 ...

替换应如下:

A = 1,B = 2,C = 3,d = 4,E = 5,F = 6。

如果有3000个级别:

"美国" = 1" UK" = 2 ....,法国=" 3000"

解决方案应自动检测水平(例如:3000),然后从1到3000替换每个级别。

3 个答案:

答案 0 :(得分:3)

对于InsectSprays示例,您可以使用:

levels(InsectSprays$spray) <- 1:6

应该概括你的问题。

答案 1 :(得分:1)

因子变量已经具有与每个因子水平相对应的基础数值。你可以看到如下:

as.numeric(InsectSprays$spray)

x = factor(c("A","D","B","G"))
as.numeric(x)

如果要添加与每个级别对应的特定数值,您可以例如从查找表中合并这些值:

# Create a lookup table with the numeric values you want to correspond to each level of spray
lookup = data.frame(spray=levels(InsectSprays$spray), sprayNumeric=c(5,4,1,2,3,6))

# Merge lookup values into your data frame
InsectSprays = merge(InsectSprays, lookup, by="spray")

答案 2 :(得分:0)

基于本教程 (https://statisticsglobe.com/how-to-convert-a-factor-to-numeric-in-r/),我使用以下代码将因子水平转换为特定数字

<!DOCTYPE html>
<html>

<body>
  <div class="root">
    <div class="left">
      this section should stretch parent height if it's content is large
    </div>

    <div class="right">
      this section should not stretch parent height, only fill what's available, regardless of it's content
    </div>
  </div>
</body>

</html>