You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用R统计逗号分隔的英雄联盟英雄标签分组条目数

英雄联盟英雄标签统计的更优实现

原始数据集

nametags
AatroxFighter
AhriMage,Assassin
AkaliAssassin
AkshanMarksman,Assassin
AlistarTank,Support

需求

统计每个标签对应的英雄总数

现有实现(新手方案)

使用的包:

library(tidyverse)
library(janitor)

步骤及代码:

  1. 将标签拆分为不同列
lol_champions_tags <- lol_champions_clean %>% 
  select(name, tags) %>% 
  separate(tags, sep = ',', into = paste0('tag', 1:2))
  1. 分别统计各标签列的条目数
lol_champions_tags %>% 
  select(name, tag1) %>% 
  group_by(tag1) %>% 
  summarise(N = n()) -> tag1

lol_champions_tags %>% 
  select(name, tag2) %>% 
  drop_na() %>% 
  group_by(tag2) %>% 
  summarise(N = n()) -> tag2
  1. 合并结果并计算总数
champions_per_tag <-
bind_cols(tag1, tag2) %>%
clean_names() %>%
select(tag1,n_2,n_4) %>%
mutate(total_entries = n_2 + n_4) %>%
select(tag1, total_entries)

更优实现方案

不需要拆分多列再合并,用tidyr的separate_rows()函数可以直接将每个标签拆成独立行,之后直接分组统计即可,代码更简洁且扩展性更强(比如英雄有3个标签的情况也能处理):

library(tidyverse)

champions_per_tag <- lol_champions_clean %>%
  select(name, tags) %>%
  # 将逗号分隔的标签拆分为多行,每行对应一个标签
  separate_rows(tags, sep = ",") %>%
  # 按标签分组统计数量
  group_by(tags) %>%
  summarise(total_entries = n())

运行后得到的结果:

tagstotal_entries
Assassin3
Fighter1
Mage1
Marksman1
Support1
Tank1

这个方法的优势:

  • 无需提前预判标签列的数量(比如如果有英雄有3个标签,原方法需要手动调整拆分列数,而这个方法自动适配)
  • 代码步骤更少,逻辑更清晰,避免了拆分多列后合并的繁琐操作
  • 仅依赖tidyverse即可完成统计,无需额外引入janitor包

内容的提问来源于stack exchange,提问作者Hiram Méndez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 10:53:09