如何按R中的条件排序因子?

时间:2017-02-25 21:17:29

标签: r

我想根据观察的总和来排序因子。

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的顺序应为648。我的意思是

 $ cyl : Factor w/ 3 levels "6","4","8"

我怎么能意识到这一点?

问题的背景是: Order groups in a stacked stripchart by sum in R

1 个答案:

答案 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函数执行必要的转换。