根据R中的频率将因子转换为整数

根据R中的频率将因子转换为整数,r,R,因子向量: vec <- factor(c('a','b','b','c','b','c')) [1] a b b c b c Levels: a b c 频率较高的将转换为较

因子向量:

vec <- factor(c('a','b','b','c','b','c'))
[1] a b b c b c                                                                                                                                                              
Levels: a b c
频率较高的将转换为较小的整数。
非常感谢您的帮助,谢谢

不确定是否有更有效的方法,但您可以通过tablevec了解不同级别的因子出现的频率,然后您可以使用levelsvec手动排序因子级别。不确定是否有更有效的方法,但是,您可以通过tablevec了解因子的不同级别出现的频率,然后可以使用levelsvec手动排序因子的级别 资料

资料


再加上一句话:

as.numeric(reorder(vec, -ave(as.numeric(vec), vec, FUN = length)))
# [1] 3 1 1 2 1 2

首先,用ave计算负-以获得每个向量级别的正确排序频率,然后用reorder对因子级别进行重新排序。后者计算每个级别的-ave的平均值,并相应地按递增顺序使用因子级别,这就是我们使用-ave的原因。。最后,将系数转换为数字。

只需再加上一行:

as.numeric(reorder(vec, -ave(as.numeric(vec), vec, FUN = length)))
# [1] 3 1 1 2 1 2

首先,用ave计算负-以获得每个向量级别的正确排序频率,然后用reorder对因子级别进行重新排序。后者计算每个级别的-ave的平均值,并相应地按递增顺序使用因子级别,这就是我们使用-ave的原因。。最后,将因子转换为数字。

您尝试过什么吗?as.numericfactorvec,levels=namesorttablevec,discreating=TRUEWas正在尝试summaryvec并计划提取数据帧的频率和名称。但是被卡住了。我在做一个更整洁的。你的很整洁。非常感谢。你试过什么吗?as.numericfactorvec,levels=namesorttablevec,discreating=TRUEWas正在尝试summaryvec并计划提取数据帧的频率和名称。但是被卡住了。我在做一个更整洁的。你的很整洁。非常感谢。这是正确的方向,非常感谢。我想我明白了。这是正确的方向,非常感谢。我想我明白了。或者它看起来像s或者它看起来像s
s <- sort(table(x)) 
x <- factor(vec, labels = rev(s), levels = names(s))
vec <- letters[c(1,2,2,3,2,3)]
x <- factor(vec)
[1] a b b c b c
Levels: a b c
as.numeric(reorder(vec, -ave(as.numeric(vec), vec, FUN = length)))
# [1] 3 1 1 2 1 2