Использование нескольких столбцов в оконных функциях dplyr?
Исходя из 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
?
0 ответов
Я боролся с этой проблемой, и вот мое решение:
Если вы не можете найти какую-либо функцию, которая поддерживает упорядочивание по нескольким переменным, я предлагаю объединить их по уровню приоритета слева направо, используя paste()
.
Ниже приведен пример кода:
tbl %>%
mutate(n = dense_rank(paste(Name, Email))) %>%
arrange(Name, Email) %>%
view()
Более того, я полагаю, что group_by является эквивалентом PARTITION BY в SQL.
Недостатком этого решения является то, что вы можете заказывать только по 2 (или более) переменным, которые имеют одинаковое направление. В случае, если вам нужно упорядочить по нескольким столбцам, которые имеют разное направление, говоря, что 1 asc и 1 desc, я предлагаю вам попробовать следующее: вычислить ранг со связями на основе более чем одной переменной