使用自定义顺序排列上一次排序后的行与排列

时间:2017-07-12 06:18:39

标签: r dplyr

我知道这已经被问到了,但我认为我的问题有点不同(如果是葡萄牙文,那就不用担心)。 我有这个数据集:

 df <- cbind(c(rep(2012,6),rep(2016,6)),
         rep(c('Emp.total',
               'Fisicas.total',
               'Outros,total',
               'Politicos.total',
               'Receitas.total',
               'Proprio.total'),2),
         runif(12,0,1))

colnames(df) <- c('Year,'Variable','Value)

我想命令行首先将具有相同年份的所有内容分组。之后,我希望Variable列的排序方式如下:

  1. Receitas.total
  2. Fisicas.total
  3. Emp.total
  4. Politicos.total
  5. Proprio.total
  6. Outros.total
  7. 我知道我可以使用arrange()中的dplyr按年份排序。但是,我不知道如何将其与使用factororder的任何例程相结合,而不会在一年之前搞乱先前的排序。

    有任何帮助吗?谢谢

1 个答案:

答案 0 :(得分:1)

我们通过转换&#39;变量&#39;来创建自定义order。进入factor,并在自定义levels

中指定order
library(dplyr)
df %>%
   arrange(Year, factor(Variable, levels = c('Receitas.total', 
       'Fisicas.total', 'Emp.total',  'Politicos.total', 
        'Proprio.total',  'Outros.total')))
# A tibble: 12 x 3
#    Year        Variable     Value
#   <dbl>           <chr>     <dbl>
# 1  2012  Receitas.total 0.6626196
# 2  2012   Fisicas.total 0.2248911
# 3  2012       Emp.total 0.2925740
# 4  2012 Politicos.total 0.5188971
# 5  2012   Proprio.total 0.9204438
# 6  2012    Outros,total 0.7042230
# 7  2016  Receitas.total 0.6048889
# 8  2016   Fisicas.total 0.7638205
# 9  2016       Emp.total 0.2797356
#10  2016 Politicos.total 0.2547251
#11  2016   Proprio.total 0.3707349
#12  2016    Outros,total 0.8016306

数据

set.seed(24)
df <- data_frame(Year  =c(rep(2012,6),rep(2016,6)),
     Variable = rep(c('Emp.total',
           'Fisicas.total',
           'Outros,total',
           'Politicos.total',
           'Receitas.total',
           'Proprio.total'),2),
     Value = runif(12,0,1))