如果混合在一列中,如何计算一组的总条目

问题描述 投票:0回答:1

我正在使用英雄联盟冠军数据集

名字 标签
亚托克斯 战士
阿狸 法师、刺客
阿卡丽 刺客
阿克尚 射手、刺客
阿利斯塔 坦克、支援

我想知道如何计算每个标签的冠军总数,我对 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 dataframe dplyr count grouping
1个回答
0
投票

在基础 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)
© www.soinside.com 2019 - 2024. All rights reserved.