使用dplyr在R中的整洁数据框中进行多个值排名

卡诺维奇

有时我会尝试创建一个涵盖整个问题的标题,但是我在表达问题时遇到了一些困难,并且想直接举例说明我要完成的工作。首先,我的数据框的子集,其中包括一些体育数据:

dput(mydf)
structure(list(team.Abbreviation = c("ATL", "BOS", "BRO", "CHA", 
"CHI", "ATL", "BOS", "BRO", "CHA", "CHI", "ATL", "BOS", "BRO", 
"CHA", "CHI"), stat = c("GP", "GP", "GP", "GP", "GP", "PTS", 
"PTS", "PTS", "PTS", "PTS", "REB", "REB", "REB", "REB", "REB"
), value = c(28, 30, 27, 27, 27, 103.5, 103.9, 108.2, 104.7, 
97.6, 47.6, 53, 54.7, 56.8, 51.7), foragainst = c("for", "for", 
"for", "for", "for", "for", "for", "for", "for", "for", "for", 
"for", "for", "for", "for")), .Names = c("team.Abbreviation", 
"stat", "value", "foragainst"), row.names = c(NA, -15L), class = c("tbl_df", 
"tbl", "data.frame"))

mydf
# A tibble: 15 x 4
    team.Abbreviation  stat value foragainst
               <chr> <chr> <dbl>      <chr>
 1               ATL    GP  28.0        for
 2               BOS    GP  30.0        for
 3               BRO    GP  27.0        for
 4               CHA    GP  27.0        for
 5               CHI    GP  27.0        for
 6               ATL   PTS 103.5        for
 7               BOS   PTS 103.9        for
 8               BRO   PTS 108.2        for
 9               CHA   PTS 104.7        for
10               CHI   PTS  97.6        for
11               ATL   REB  47.6        for
12               BOS   REB  53.0        for
13               BRO   REB  54.7        for
14               CHA   REB  56.8        for
15               CHI   REB  51.7        for

目前,foragainst列可以忽略。对于每个统计信息(在这种情况下为GP,PTS,REB),我想计算该统计中每个团队的排名。此示例中有5个团队。我相当确定我想要的是一个尺寸与mydf相同的数据框,看起来像这样:

outputdf
# A tibble: 15 x 4
    team.Abbreviation  stat rank  foragainst
               <chr> <chr> <dbl>      <chr>
 1               ATL    GP     2        for
 2               BOS    GP     1        for
 3               BRO    GP     3        for
 4               CHA    GP     3        for
 5               CHI    GP     3        for
 6               ATL   PTS     4        for
 7               BOS   PTS     3        for
 8               BRO   PTS     1        for
 9               CHA   PTS     2        for
10               CHI   PTS     5        for
11               ATL   REB     5        for
12               BOS   REB     3        for
13               BRO   REB     2        for
14               CHA   REB     1        for
15               CHI   REB     4        for

检查此数据的5行切片,其中stat == PTS,请注意team.Abbrevation == BRO具有最高的PTS数量,因此其排名为1。CHI具有最低的PTS数量,因此其排名为5。我并不特别在意关系的处理方式,因此对于统计== GP的BRO,CHA和CHI排名不一定等于3。

我可能可以通过for循环以相当低效的方式完成此操作,但是我想在这里找到dplyr(或其他好的软件包)解决方案。提前致谢!

阿克伦

我们可以用 min_rank

library(dplyr)
mydf %>% 
    group_by(stat) %>% 
    mutate(rank = min_rank(-value)) %>% 
    select(team.Abbreviation, stat, rank, foragainst)
# A tibble: 15 x 4
# Groups:   stat [3]
#   team.Abbreviation  stat  rank foragainst
#               <chr> <chr> <int>      <chr>
# 1               ATL    GP     2        for
# 2               BOS    GP     1        for
# 3               BRO    GP     3        for
# 4               CHA    GP     3        for
# 5               CHI    GP     3        for
# 6               ATL   PTS     4        for
# 7               BOS   PTS     3        for
# 8               BRO   PTS     1        for
# 9               CHA   PTS     2        for
#10               CHI   PTS     5        for
#11               ATL   REB     5        for
#12               BOS   REB     3        for
#13               BRO   REB     2        for
#14               CHA   REB     1        for
#15               CHI   REB     4        for

或使用avebase R

with(mydf, ave(-value, stat, FUN = function(x) rank(x, ties.method = "min")))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何对 R 数据框中的唯一值进行排名

R使用dplyr根据一列中的最大值对数据框进行变异

在单个列中平均多个值以在R中的整洁数据框中创建一个新变量

R-使用reshape2或dplyr对同一单元中具有多个元素的数据框进行整形

如何使用dplyr在R中使用值转换数据框跨多个列更改值

如何使用 dplyr 旋转复杂的整洁数据框

对数据框中的几列进行排名

使用DateTime列和多个观察值在R中进行数据整理

我们可以使用R / Dplyr来基于2个不同列中的值进行排名吗?

使用 R 对列中的重复值组进行排名

如何使用存储在 R 中的另外两个数据框中的列顺序从数据框中进行选择?

根据排名替换数据框中的值

在R中的数据框中进行坐标分配

如何在R中的数据框中进行组划分?

根据数据框中的前一列值对列值进行排名

如何按r中数据框中的行对数字数据进行排名?

数据框以R的整洁格式

R:对大型数据框或矩阵中的单个列数据进行排名

使用R中具有相同值的外部数据框对数据框进行排序

用桶对r中的值进行排名

使用数据框中的值进行计算

在R base中的数据框中按行对数值进行排名

如何基于R数据框中的多个列条件创建基于排名的列

如何使用dplyr查找R数据框中两行中的值之间的差异

使用其他列的索引值在pandas数据框中的一列中进行字符串索引

同时对R中的整洁数据执行多个t.test

从R中的整洁数据同时创建多个条形图

确定值是否存在于 R 中的分组数据框中的逻辑测试(整洁的解决方案)

对pandas数据框中的多个文本列的值进行排序