初始情况
我有一个以下形式的数据集:
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
然而,我不明白
为什么?
代码是有效的。在阅读
documentation
属于
dplyr::with_order()
,它说论点是
-
order_by
=要排序的向量
-
fun
=窗口功能
-
x, ...
=支持
f
鉴于文档中的描述和工作代码,我有两个问题无法回答:
-
争论的目的是什么
x
? 为什么不直接指定要排序的向量和窗口函数(比如在sql中)?这是什么意思
F
?
-
为什么我不用写呢
order_by = desc(iq)
x = desc(iq)
设定
order_by = iq
.这似乎与文件相矛盾,文件中说
订购
=要排序的向量。