在python中,您可以使用.cat.code为变量生成分类代码,例如
df['col3'] = df['col3'].astype('category').cat.code
你是怎么用R做的?
为@ Sid29进一步充实:
python方法函数.cat.code
提取因子级别的数字表示。 R中的等价物是:
a <- factor(c("good", "bad", "good", "bad", "terrible"))
as.numeric(a)
[1] 2 1 2 1 3
请注意,.cat.code
将代表NA
(或NaN
同样的东西)与-1
,而上述解决方案仍然保留NA
和输出将简单NA
。
编辑:as.numeric(a)
更好。讨论在labels
函数中使用as.numeric
函数。请参阅?factor
中的警告:
特别是,as.numeric应用于一个因子是没有意义的,并且可能通过隐式强制发生。要将因子f转换为大约其原始数值,建议使用.numeric(levels(f))[f],并且比as.numeric(as.character(f))稍微更有效。
有一些异常与NA作为一个水平的因素有关。建议谨慎使用它们,例如仅用于制表目的。
如果你有一个NA
值,它会强制所有值到NA
,因此使用labels
的原因。有趣的是,c(a)
的作品(参见下面的@ 42答案)。
也许更清楚的是做以下事情:
# if you want numeric code for every value
a <- factor(c("good", "bad", "good", "bad", "terrible"))
as.integer(a)
# 2 1 2 1 3
# unique labels and the values for them
setNames(levels(a), seq_along(levels(a)))
# 1 2 3
# "bad" "good" "terrible"