我正在使用英雄联盟冠军数据集
名字 | 标签 |
---|---|
亚托克斯 | 战士 |
阿狸 | 法师、刺客 |
阿卡丽 | 刺客 |
阿克尚 | 射手、刺客 |
阿利斯塔 | 坦克、支援 |
我想知道如何计算每个标签的冠军总数,我对 R 非常陌生,所以我做了一个我认为非常糟糕的解决方案,我知道这可能是一个可以帮助解决这个问题的函数。
首先,我将标签分成不同的列
library(tidyverse)
lol_champions_tags <- lol_champions_clean %>%
select(name, tags) %>%
separate(tags, sep = ',', into = paste0('tag', 1:2))
然后,我计算每个标签的总条目数
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
最后我将所有内容放在一起并添加了
library(janitor)
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)
我想知道是否有更好的方法来做到这一点,或者是否有一个函数可以处理这种情况。
您可以使用
tidyverse
函数轻松完成此操作。使用 stringr::str_split
将标签列拆分为分隔单词的列表,然后使用 unnest
和 count
...
lol_champs %>% mutate(tags = str_split(tags, ",")) %>%
unnest_longer(tags) %>%
count(tags)
# A tibble: 6 × 2
tags n
<chr> <int>
1 Assassin 3
2 Fighter 1
3 Mage 1
4 Marksman 1
5 Support 1
6 Tank 1
A
tidyverse
一行:
# PKGs (dplyr, tidyr) -----------------------------------------------------
library(tidyverse)
# Toy data ----------------------------------------------------------------
lol_data <- tibble::tribble(
~name, ~tags,
"Aatrox", "Fighter",
"Ahri", "Mage,Assassin",
"Akali", "Assassin",
"Akshan", "Marksman,Assassin",
"Alistar", "Tank,Support")
# Code (just `separate_rows` and `count` it) ------------------------------
lol_champs <- count(separate_rows(lol_data, tags, sep = ",\\s?"), tags, name = "total_entries")
# Output ------------------------------------------------------------------
lol_champs
#> # A tibble: 6 × 2
#> tags total_entries
#> <chr> <int>
#> 1 Assassin 3
#> 2 Fighter 1
#> 3 Mage 1
#> 4 Marksman 1
#> 5 Support 1
#> 6 Tank 1
创建于 2024-07-25,使用 reprex v2.1.0
也许你只想要这句话
> as.data.frame(table(unlist(strsplit(lol_champs$tags, ",", fixed=TRUE))))
Var1 Freq
1 Assassin 3
2 Fighter 1
3 Mage 1
4 Marksman 1
5 Support 1
6 Tank 1
最后的代码部分似乎不清楚,所以我不复制它。
lol_champs = read.table(text="name tags
Aatrox Fighter
Ahri Mage,Assassin
Akali Assassin
Akshan Marksman,Assassin
Alistar Tank,Support", header=TRUE)