Рассмотрим следующий фрейм данных:
name <- c("Sally", "Dave", "Aaron", "Jane", "Michael")
rank <- c(1,2,1,2,3)
df <- data.frame(name, rank, stringsAsFactors = FALSE)
Я хотел бы создать переменную группировки (событие) на основе столбца ранга, например:
event <- c("Hurdles", "Hurdles", "Long Jump", "Long Jump", "Long Jump")
df_desired <- data.frame(name, rank, event, stringsAsFactors = FALSE)
Есть лотов из примеров того, как идти другим путем (создание ранжирующей переменной на основе группы), но я не могу найти того, кто делает то, что хотел бы .
Можно использовать filter
, full_join
, а затем fill
, как показано ниже, но есть ли более простой способ?
library(tidyverse)
df <- df %>%
mutate(order = row_number())
df_1 <- df %>%
filter(rank == 1)
df_1$event <- c("Hurdles", "Long Jump")
df %>%
filter(rank != 1) %>%
mutate(event = as.character(NA)) %>%
full_join(df_1, by = c("order", "name", "rank", "event")) %>%
arrange(order) %>%
fill(event) %>%
select(-order)