【发布时间】:2023-04-08 03:44:02
【问题描述】:
考虑以下数据框:
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)
有lots of examples 采取另一种方式(根据组创建排名变量),但我似乎找不到一个做我想做的事。
可以使用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)
【问题讨论】: