我有一个数据框,其中每列都是类型因子,并且有超过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替换每个级别。
答案 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>