読み込んだデータに対して、演算した結果を格納したり、新たな列(データ)を追加するには、 mutate() 関数を使います。
テーブル %>% mutate(追加される列名 = 演算の式)
例えば、2つの列の結果から、ratio を算出して、その結果を格納する場合に使います。下記の例では、 Sample2 と Sample1 の列から ratio を求め、その結果を「Ratio」列に格納しています。新たに追加される列であるため、列名の Ratio をダブルクオーテーションで囲みます。
> raw_data
# A tibble: 3 x 5
Id Symbol Description Sample1 Sample2
<chr> <chr> <chr> <dbl> <dbl>
1 id1 AAA lorem ipsum a 1 4
2 id2 BBB lorem ipsum b 2 5
3 id3 CCC lorem ipsum c 3 6
>
>
> raw_data %>% mutate("Ratio" = Sample2 / Sample1)
# A tibble: 3 x 6
Id Symbol Description Sample1 Sample2 Ratio
<chr> <chr> <chr> <dbl> <dbl> <dbl>
1 id1 AAA lorem ipsum a 1 4 4
2 id2 BBB lorem ipsum b 2 5 2.5
3 id3 CCC lorem ipsum c 3 6 2
演算の式 (Sample2 / Sample1 ) が、それぞれの「行」に対して、適用されるようなイメージです。式には、関数も使えます。例えば、平均値を算出するには、 rowMeans() が使えます。
> samples <- raw_data %>% select(starts_with("Sample"))
> samples
# A tibble: 3 x 2
Sample1 Sample2
<dbl> <dbl>
1 1 4
2 2 5
3 3 6
> # 数値だけのオブジェクトを準備
>
> raw_data %>% mutate("Ave" = rowMeans(samples))
# A tibble: 3 x 6
Id Symbol Description Sample1 Sample2 Ave
<chr> <chr> <chr> <dbl> <dbl> <dbl>
1 id1 AAA lorem ipsum a 1 4 2.5
2 id2 BBB lorem ipsum b 2 5 3.5
3 id3 CCC lorem ipsum c 3 6 4.5
計算の邪魔になるため、 Id などを除いた数値だけのオブジェクト (samples) を作成しておき、 これを rowMeans の引数としています。このパターンで記述しておくと、サンプル数が多くても、同じ表現で計算できます。
もちろん、パイプで連続した処理も可能です。
up_genes <- raw_data %>%
mutate("Ratio" = Sample2 / Sample1) %>%
mutate("Ave" = rowMeans(samples)) %>%
select(Symbol, Ratio, Ave) %>%
filter(Ratio > 2)
> # 上記の実行結果
> up_genes
# A tibble: 2 x 3
Symbol Ratio Ave
<chr> <dbl> <dbl>
1 AAA 4 2.5
2 BBB 2.5 3.5