我正在使用英雄联盟冠军数据集
名字 | 标签 |
---|---|
亚托克斯 | 战士 |
阿狸 | 法师、刺客 |
阿卡丽 | 刺客 |
阿克尚 | 射手、刺客 |
阿利斯塔 | 坦克、支援 |
我想知道如何计算每个标签的冠军总数,我对 R 非常陌生,所以我做了一个我认为非常糟糕的解决方案,我知道这可能是一个可以帮助解决这个问题的函数。
首先,我将标签分成不同的列
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
最后我将所有内容放在一起并添加了
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)\`\`\`
我想知道是否有更好的方法来做到这一点,或者是否有一个函数可以处理这种情况。
在基础 R 中我们可以做
# this is specific to the use case!
f = \(l) { lapply(l, `length<-`, max(lengths(l))) |> list2DF() |> t() }
f(strsplit(lol_champs$tags, ",", fixed=TRUE)) |> data.frame() |>
`colnames<-`(paste0("tag", 1L:2L)) |> lapply(table)
#> $tag1
#>
#> Assassin Fighter Mage Marksman Tank
#> 1 1 1 1 1
#>
#> $tag2
#>
#> Assassin Support
#> 2 1
尚不清楚最后一个代码部分中的函数是从哪里导出的,因此我不会复制该部分。
lol_champs = read.table(text="name tags
Aatrox Fighter
Ahri Mage,Assassin
Akali Assassin
Akshan Marksman,Assassin
Alistar Tank,Support", header=TRUE)