初始情况
我具有以下形式的数据集:
library(dplyr)
dat <- tribble(
~name, ~iq,
"ben", 100,
"alex", 98,
"mia", 110,
"paco", 124,
"mia", 112,
"mia", 120,
"paco", 112,
"ben", 90,
"alex", 107
)
我想创建一个新列,该列按name
分组,值iq
降序排列。用SQL可以写
select
name,
iq,
row_number() over (partition by name order by iq desc) as rank
from
dat;
将产生以下预期输出(为简单起见已订购):
#> name iq rank
#> <chr> <dbl> <int>
#> 1 alex 107 1
#> 2 alex 98 2
#> 3 ben 100 1
#> 4 ben 90 2
#> 5 mia 120 1
#> 6 mia 112 2
#> 7 mia 110 3
#> 8 paco 124 1
#> 9 paco 112 2
问题
使用我的数据,可以通过以下方式获得所需的结果:
dat %>%
group_by(name) %>%
mutate(rank = with_order(order_by = iq,
fun = row_number,
x = desc(iq)
)
) %>%
arrange(name, rank)
#> # A tibble: 9 x 3
#> # Groups: name [4]
#> name iq rank
#> <chr> <dbl> <int>
#> 1 alex 107 1
#> 2 alex 98 2
#> 3 ben 100 1
#> 4 ben 90 2
#> 5 mia 120 1
#> 6 mia 112 2
#> 7 mia 110 3
#> 8 paco 124 1
#> 9 paco 112 2
但是,我不明白为什么为什么有效。读取dplyr::with_order()
的{{3}}时,表示参数为
order_by
=要排序的向量fun
=窗口函数x, ...
= f
的参数鉴于文档中的描述和工作代码,我有两个我无法回答的问题:
x
的目的是什么?为什么不只指定要排序的向量和window函数(如sql中)? f
是什么意思?order_by = desc(iq)
?要获得结果,我希望我必须写x = desc(iq)
并设置order_by = iq
。这似乎与文档相矛盾,该文档指出order_by
=要排序的向量。