根据数据框中的变量组对行进行排序

时间:2018-09-28 14:45:25

标签: r sorting dplyr

我有一个看起来像这样的数据框-

df=data.frame(Code=c('Q1','Q1','Q1','Q1','Q2','Q2','Q2','Q2','Q3','Q3','Q3','Q3'),
          Fiscal_Year=c('FY18','FY16','FY17','FY15','FY15','FY18','FY17','FY16','FY15','FY16','FY17','FY18'),
          Score=c(0.23,0.25,0.32,0.41,0.61,0.54,0.45,0.51,0.78,0.79,0.81,0.84))

我的目标是按问题Code分组(在数据框中已经是这种情况),然后对于每个组,按Fiscal_Year的升序对行进行排序。

会计年度为2015财年(2015财年),2016财年(2016财年),2017财年(2017财年)和18财年(2018财年)。

  

因此,级别顺序为2015财年<16财年<17财年<18财年。

为了定义R中的级别,我做了以下操作-

#Convert column to factor
df$Fiscal_Year=as.factor(df$Fiscal_Year)
#Define order of levels
levels(df$Fiscal_Year)=c("FY15","FY16","FY17","FY18")

接下来,我希望按Code分组,然后在各组中分别按Fiscal_Year 的升序排序

例如,对于问题组Q2,我希望这些行按会计年度(FY15,FY16,FY17,FY18)的升序进行排序。其他问题组也一样。

我的尝试

使用dplyr软件包,我尝试这样做

library(dplyr)

df=sat %>%
group_by(CTQ_QUEST_CODE,FY) %>%
arrange(CTQ_QUEST_CODE,desc(FY))

但是我没有得到想要的结果。

对此表示感谢。

4 个答案:

答案 0 :(得分:4)

只需将.by_group = TRUE添加到arrange()

df %>%
        group_by(Code) %>%
        arrange(Fiscal_Year, .by_group = TRUE)

答案 1 :(得分:2)

我们可以用arrange CodeFiscal_Year中的数字部分

library(dplyr)
library(readr)

df %>%
    arrange(Code, parse_number(Fiscal_Year))

#   Code Fiscal_Year Score
#1    Q1        FY15  0.41
#2    Q1        FY16  0.25
#3    Q1        FY17  0.32
#4    Q1        FY18  0.23
#5    Q2        FY15  0.61
#6    Q2        FY16  0.51
#7    Q2        FY17  0.45
#8    Q2        FY18  0.54
#9    Q3        FY15  0.78
#10   Q3        FY16  0.79
#11   Q3        FY17  0.81
#12   Q3        FY18  0.84

答案 2 :(得分:1)

从基数R order

df[order(df$Code,df$Fiscal_Year),]
   Code Fiscal_Year Score
4    Q1        FY15  0.41
2    Q1        FY16  0.25
3    Q1        FY17  0.32
1    Q1        FY18  0.23
5    Q2        FY15  0.61
8    Q2        FY16  0.51
7    Q2        FY17  0.45
6    Q2        FY18  0.54
9    Q3        FY15  0.78
10   Q3        FY16  0.79
11   Q3        FY17  0.81
12   Q3        FY18  0.84

答案 3 :(得分:0)

您能不能从desc()语句中摆脱arrange()吗?

> df %>%
+ group_by(Code,Fiscal_Year) %>%
+ arrange(Code,Fiscal_Year)

# A tibble: 12 x 3
# Groups:   Code, Fiscal_Year [12]

   Code  Fiscal_Year Score
   <fct> <fct>       <dbl>
 1 Q1    FY15         0.41
 2 Q1    FY16         0.25
 3 Q1    FY17         0.32
 4 Q1    FY18         0.23
 5 Q2    FY15         0.61
 6 Q2    FY16         0.51
 7 Q2    FY17         0.45
 8 Q2    FY18         0.54
 9 Q3    FY15         0.78
10 Q3    FY16         0.79
11 Q3    FY17         0.81
12 Q3    FY18         0.84

> df %>% arrange(Code, Fiscal_Year)

   Code Fiscal_Year Score
1    Q1        FY15  0.41
2    Q1        FY16  0.25
3    Q1        FY17  0.32
4    Q1        FY18  0.23
5    Q2        FY15  0.61
6    Q2        FY16  0.51
7    Q2        FY17  0.45
8    Q2        FY18  0.54
9    Q3        FY15  0.78
10   Q3        FY16  0.79
11   Q3        FY17  0.81
12   Q3        FY18  0.84