pip*_*oma 6 r window-functions dplyr
初始情况
我有以下形式的数据集:
library(dplyr)
dat <- tribble(
~name, ~iq,
"ben", 100,
"alex", 98,
"mia", 110,
"paco", 124,
"mia", 112,
"mia", 120,
"paco", 112,
"ben", 90,
"alex", 107
)
Run Code Online (Sandbox Code Playgroud)
我想创建一个新列,按降序name
对值iq
进行排序和分组。在 SQL 中可以写
select
name,
iq,
row_number() over (partition by name order by iq desc) as rank
from
dat;
Run Code Online (Sandbox Code Playgroud)
这将产生以下预期输出(为简单起见已排序):
library(dplyr)
dat <- tribble(
~name, ~iq,
"ben", 100,
"alex", 98,
"mia", 110,
"paco", 124,
"mia", 112,
"mia", 120,
"paco", 112,
"ben", 90,
"alex", 107
)
Run Code Online (Sandbox Code Playgroud)
问题
使用我的数据,可以通过以下方式获得所需的结果:
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
Run Code Online (Sandbox Code Playgroud)
但是,我不明白为什么代码有效。在阅读 的文档时dplyr::with_order()
,它说参数是
order_by
= 要排序的向量fun
= 窗函数x, ...
= 论据 f
鉴于文档和工作代码中的描述,我有两个问题无法回答:
x
什么?为什么不指定要排序的向量和窗口函数(如在 sql 中)?是什么意思f
?order_by = desc(iq)
?为了得到我期望的结果,我必须编写x = desc(iq)
和设置order_by = iq
. 这似乎与文档相矛盾,该文档指出order_by
= 要排序的向量。 归档时间: |
|
查看次数: |
3274 次 |
最近记录: |