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 であり、型が異なるためです。

 

投稿者:

Atsushi Doi

株式会社セルイノベーター 取締役、研究開発部部長。理学博士。山口大学大学院理工学研究科修了。東京大学医科学研究所ヒトゲノム解析センターの特任助手を経て、株式会社GNIに主任研究員として勤務。その後、株式会社セルイノベーターの立ち上げに参加し、現在に至る。専門は、バイオインフォマティクス、おもにシステムバイオロジー。