R (tidyverse) ワードカウント: group_by(), summarize()

tidyverse では、ワードカウントも、group_by() 関数に続いて、 summarize() 関数を使うと、簡単に記述できます。

下記のように複数の Symbol がある時、AAA は3個、CCC は2個と数えるようなケースです。

> meta_data %>% select(Id, Symbol)
# A tibble: 9 x 2
  Id    Symbol
  <chr> <chr>
1 id1   AAA
2 id2   AAA
3 id3   AAA
4 id4   BBB
5 id5   BBB
6 id6   BBB
7 id7   CCC
8 id8   CCC
9 id9   DDD

カウントするために、いったん、 mutate(count = 1) として、計算用のデータを格納しておきます。

> meta_data %>% select(Id, Symbol) %>% mutate("count" = 1)

# A tibble: 9 x 3
  Id    Symbol count
  <chr> <chr>  <dbl>
1 id1   AAA        1
2 id2   AAA        1
3 id3   AAA        1
4 id4   BBB        1
5 id5   BBB        1
6 id6   BBB        1
7 id7   CCC        1
8 id8   CCC        1
9 id9   DDD        1

group_by(Symbol) %>% summarize("total" = sum(count)) として、カウントの合計を求めることができます。続けて書くと、下記のようなコードになります。

result_data <- meta_data %>%
  select(Id, Symbol)     %>%
  mutate("count" = 1)    %>%
  group_by(Symbol)       %>%
  summarize(total = sum(count))
>
>
> result_data
# A tibble: 4 x 2
  Symbol total
  <chr>  <dbl>
1 AAA        3
2 BBB        3
3 CCC        2
4 DDD        1

ちなみに、 summarize("total" = sum(Symbol)) とすることはできません。sum() 関数が integer や double などの数値を引数とすることに対して、Symbol は character であり、型が異なるためです。