我想根据观察的总和来排序因子。
df <- mtcars[,c('cyl', 'gear')]
df$cyl <- factor(df$cyl)
str(df)
'data.frame': 32 obs. of 2 variables:
$ cyl : Factor w/ 3 levels "4","6","8": 2 2 1 2 3 2 3 1 1 2 ...
$ gear: num 4 4 4 3 3 3 3 4 4 4 ...
请查看行中的总和cyl
。
addmargins(table(df))
gear
cyl 3 4 5 Sum
4 1 8 2 11
6 2 4 1 7
8 12 0 2 14
Sum 15 12 5 32
升序cyl
的顺序应为6
,4
和8
。我的意思是
$ cyl : Factor w/ 3 levels "6","4","8"
我怎么能意识到这一点?
答案 0 :(得分:1)
您可以将所需的顺序输入factor
的levels参数。在这种情况下,要在运行中执行此操作,请将第二行替换为:
df$cyl <- factor(df$cyl, levels=names(sort(table(df$cyl))))
然后你得到
str(df)
'data.frame': 32 obs. of 2 variables:
$ cyl : Factor w/ 3 levels "6","4","8": 1 1 2 1 3 1 3 2 2 1 ...
$ gear: num 4 4 4 3 3 3 3 4 4 4 ...
此处,使用table
计算频率值,然后使用sort
按升序排序。结果被输入到level参数,该参数确定factor
中的级别顺序。
注意:我最初将names
包裹在as.numeric
中,但后来发现这不是必需的。 factor
函数执行必要的转换。