首页 > 解决方案 > 获取R中的组序列

问题描述

所以我已经做了我需要的,但我确信有更好的方法来做到这一点

library(tidyverse)
library(schrute)
office <- schrute::theoffice

top_3_lines_per_episode <- office %>% 
  group_by(season,episode,episode_name,imdb_rating) %>% 
  count(character) %>%
  top_n(3, n) %>% ungroup()

epi_num<-top_3_lines_per_episode %>% 
  select(episode_name) %>% 
  unique() %>% 
  mutate(episode_num=row_number()) 

top_3_lines_per_episode %>% 
  inner_join(epi_num)

我想生成使用上面完成的列 epi_num。一种更简单的方法来做到这一点。我看过 SO 中的 group_indices ,但我认为那已经被弃用了。最好在 tidyverse 中需要更好的方法。

标签: rtidyverse

解决方案


我不知道group_indices被弃用,事实上它似乎是一个完美的选择。

library(dplyr)

office %>% 
  group_by(season,episode,episode_name,imdb_rating) %>% 
  count(character) %>%
  top_n(3, n) %>%
  ungroup %>%
  mutate(episode_num = group_indices(., season,episode,episode_name,imdb_rating))

另一种选择是将列与unite然后组合match得到episode_num.

office %>% 
  group_by(season,episode,episode_name,imdb_rating) %>% 
  count(character) %>%
  top_n(3, n) %>%
  ungroup %>%
  tidyr::unite(temp, season,episode,episode_name,imdb_rating, remove = FALSE) %>%
  mutate(episode_num = match(temp, unique(temp))) %>%
  select(-temp)

推荐阅读