在 dplyr window 函数中使用多列?

Using multiple columns in dplyr window functions?

来自 SQL 我希望我能够在 dplyr 中做类似下面的事情,这可能吗?

# R
tbl %>% mutate(n = dense_rank(Name, Email))

-- SQL
SELECT Name, Email, DENSE_RANK() OVER (ORDER BY Name, Email) AS n FROM tbl

还有 PARTITION BY 的等价物吗?

我确实遇到了这个问题,这是我的解决方案:

如果您找不到任何支持按多个变量排序的函数,我建议您使用 paste() 按优先级从左到右将它们连接起来。

下面是代码示例:

tbl %>%
  mutate(n = dense_rank(paste(Name, Email))) %>%
  arrange(Name, Email) %>%
  view()

此外,我猜 group_by 相当于 SQL 中的 PARTITION BY。

此解决方案的缺点是您只能按 2 个(或更多)具有相同方向的变量排序。如果您需要按具有不同方向的多个列排序,比如 1 asc 和 1 desc,我建议您试试这个: Calculate rank with ties based on more than one variable