作为来自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
相当的东西?
作为来自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()
mtcars %>% mutate(n = dense_rank(interaction(cyl, hp)))
? - talatinteraction()
,我已经对值进行了哈希处理,但这会破坏顺序。有没有使用PARTITION BY
的简单解决方案? - CodeMonkeyPARTITION BY
按组进行排名,你可以在dplyr中使用group by
。 - Jasonlex.order
的交互,几乎可以模拟 OVER(ORDER BY),而 group_by 的工作也非常出色。谢谢! - CodeMonkey