В моем примере ниже, я пытаюсь сделать мутацию, которая ранжируется в пределах отфильтрованных критериев. Моя конечная цель - отфильтровать, но сохранить весь фрейм данных. Я просто хочу, чтобы мои ранги были сделаны на основе отфильтрованных критериев. Мой df_goal
ниже дает мне правильные ранги, но потребует, чтобы я затем использовал left_join
, чтобы добавить их к исходному df
, который кажется пустой тратой. Есть ли в dplyr
решение, которое позволило бы мне ранжировать исходный df
с критериями filter
? Я думал, что, возможно, труба в mutate
будет работать, но у меня ничего не получилось.
Пример:
library(tidyverse)
df <- tibble::tribble(
~slugSeason, ~namePlayer, ~groupPosition, ~slugPosition, ~ptsPerGame, ~astPerGame,
"2019-20", "Aaron Gordon", "F", "PF", 11.3, 3,
"2019-20", "Aaron Holiday", "G", "PG", 3, 1.8,
"2019-20", "Abdel Nader", "F", "SF", 3, 0.3,
"2019-20", "Admiral Schofield", "F", "SF", 4.4, 0.2,
"2019-20", "Al-Farouq Aminu", "F", "PF", 4.2, 1,
"2019-20", "Al Horford", "F", "PF", 18.8, 4.2,
"2019-20", "Alec Burks", "G", "SG", 8.5, 1.8,
"2019-20", "Alex Caruso", "G", "SG", 3.2, 1.6,
"2019-20", "Alex Len", "C", "C", 4.2, 1.6,
"2019-20", "Alfonzo McKinnie", "F", "SF", 0, 0
)
df <- df %>%
group_by(groupPosition) %>%
mutate(ptsRankbyPosition = rank(desc(ptsPerGame))) %>%
ungroup()
df_goal <- df %>%
group_by(groupPosition) %>%
mutate(ptsRankbyPosition = rank(desc(ptsPerGame))) %>%
ungroup() %>%
filter(slugPosition %in% c("PG", "SG", "SF") & ptsRankbyPosition > 1 |
slugPosition == "C" & ptsRankbyPosition > 1) %>%
mutate(addlRank = rank(desc(ptsPerGame)))
Created on 2019-11-05 by the reprex package (v0.3.0)
Заранее спасибо.