行が観測値で、列が遺伝子マーカーである非常に大きなデータフレームがあります。Rを使用して、観測ごとに選択した数の列の合計を含む新しい列を作成したいと思います.
200 列と 100 行がある場合、列 43 から 167 までの合計で 100 行の新しい列を作成したいと思います。列には 1 または 0 のいずれかがあります。各行で、遺伝子マーカーが最も多い個人を並べ替えることができます。
私はそれが何かに近いと感じています:
data$new=sum(data$[,43:167])
あなたが使用することができますrowSums
rowSums(data)
あなたが望むものをあなたに与えるべきです。
rowSums 関数 (グレッグが言及しているように) は、あなたが望むことを行いますが、答えにサブセット化手法を混在させています。「[]」を使用する場合は「$」を使用しないでください。コードは次のようになります。
data$new <- rowSums( data[,43:167] )
合計以外の関数を使用する場合は、行または列に一般的な関数を適用するための ?apply を参照してください。
データ テーブル内のすべての列の合計を取得し、上記のソリューションを実装する際に問題が発生する方法を見つけたいと思ってここに来ました。すべての列の合計で列を追加する方法は、次のcbind
関数を使用します。
cbind(data, total = rowSums(data))
この方法は、データに列を追加total
し、上記のソリューションを使用してすべての列を合計しようとしたときに発生する配置の問題を回避します (この問題の説明については、以下の投稿を参照してください)。
janitor packageのこの関数adorn_totalsを使用することもできます。引数に与える値に応じて、列または行を合計できます: where .
例:
tibble::tibble(
a = 10:20,
b = 55:65,
c = 2010:2020,
d = c(LETTERS[1:11])) %>%
janitor::adorn_totals(where = "col") %>%
tibble::as_tibble()
結果:
# A tibble: 11 x 5
a b c d Total
<int> <int> <int> <chr> <dbl>
1 10 55 2010 A 2065
2 11 56 2011 B 2067
3 12 57 2012 C 2069
4 13 58 2013 D 2071
5 14 59 2014 E 2073
6 15 60 2015 F 2075
7 16 61 2016 G 2077
8 17 62 2017 H 2079
9 18 63 2018 I 2081
10 19 64 2019 J 2083
11 20 65 2020 K 2085