首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >基于一列中的值对R数据框中的行进行排序

基于一列中的值对R数据框中的行进行排序
EN

Stack Overflow用户
提问于 2018-05-28 18:29:17
回答 2查看 1.3K关注 0票数 2

我的数据集如下

代码语言:javascript
复制
dput(data2)
structure(list(School = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 
3L, 3L), .Label = c("School1", "School2", "School3"), class = "factor"), 
    Year = c(2015L, 2014L, 2013L, 2015L, 2014L, 2013L, 2015L, 
    2014L, 2013L), Rate = c(70L, 50L, 30L, 80L, 90L, 11L, 60L, 
    50L, 40L)), .Names = c("School", "Year", "Rate"), class = "data.frame", row.names = c(NA, 
-9L))


   School Year Rate
1 School1 2015   70
2 School1 2014   50
3 School1 2013   30
4 School2 2015   80
5 School2 2014   90
6 School2 2013   11
7 School3 2015   60
8 School3 2014   50
9 School3 2013   40

我正在尝试做的是生成一个输出,其中数据按学校列分组,学校的顺序是按2015年的比率降序定义的。

因此,输出应该如下所示

代码语言:javascript
复制
   School Year Rate
1 School2 2015   80
2 School2 2014   90
3 School2 2013   11
4 School1 2015   70
5 School1 2014   50
6 School1 2013   30
7 School3 2015   60
8 School3 2014   50
9 School3 2013   40

使用我的示例中的数据,基于rate的降级值,顺序如下。School2 -> School1 -> School3 80 -> 70 -> 60

我已经尝试使用dplyr包来获得所需的输出,但没有达到效果。

EN

回答 2

Stack Overflow用户

发布于 2018-05-28 18:42:27

我们可以找到2015年的比率,然后根据列进行安排。

代码语言:javascript
复制
library(dplyr)

dat2 <- dat %>%
  group_by(School) %>%
  mutate(Year2015 = Rate[Year == 2015]) %>%
  arrange(desc(Year2015), desc(Year)) %>%
  ungroup(School) %>%
  select(-Year2015)
dat2
# # A tibble: 9 x 3
#   School   Year  Rate
#   <fct>   <int> <int>
# 1 School2  2015    80
# 2 School2  2014    90
# 3 School2  2013    11
# 4 School1  2015    70
# 5 School1  2014    50
# 6 School1  2013    30
# 7 School3  2015    60
# 8 School3  2014    50
# 9 School3  2013    40
票数 2
EN

Stack Overflow用户

发布于 2018-05-28 18:38:37

首先为每所学校计算最高费率(MaxRate)的选项。然后在MaxRateYear上按降序排列数据。

代码语言:javascript
复制
library(dplyr)

data2 %>% group_by(School) %>%
  mutate(MaxRate = max(Rate)) %>%
  arrange(desc(MaxRate), desc(Year)) %>%
  ungroup() %>%
  select(-MaxRate) %>% as.data.frame()

# School Year Rate
# 1 School2 2015   80
# 2 School2 2014   90
# 3 School2 2013   11
# 4 School1 2015   70
# 5 School1 2014   50
# 6 School1 2013   30
# 7 School3 2015   60
# 8 School3 2014   50
# 9 School3 2013   40
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50564301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档