我有一个看起来像这样的数据框-
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))
但是我没有得到想要的结果。
对此表示感谢。
答案 0 :(得分:4)
只需将.by_group = TRUE
添加到arrange()
:
df %>%
group_by(Code) %>%
arrange(Fiscal_Year, .by_group = TRUE)
答案 1 :(得分:2)
我们可以用arrange
Code
和Fiscal_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