在 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
来自 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