96

行が観測値で、列が遺伝子マーカーである非常に大きなデータフレームがあります。Rを使用して、観測ごとに選択した数の列の合計を含む新しい列を作成したいと思います.

200 列と 100 行がある場合、列 43 から 167 までの合計で 100 行の新しい列を作成したいと思います。列には 1 または 0 のいずれかがあります。各行で、遺伝子マーカーが最も多い個人を並べ替えることができます。

私はそれが何かに近いと感じています:

data$new=sum(data$[,43:167])
4

6 に答える 6

129

あなたが使用することができますrowSums

rowSums(data)あなたが望むものをあなたに与えるべきです。

于 2010-10-21T21:08:46.820 に答える
43

rowSums 関数 (グレッグが言及しているように) は、あなたが望むことを行いますが、答えにサブセット化手法を混在させています。「[]」を使用する場合は「$」を使用しないでください。コードは次のようになります。

data$new <- rowSums( data[,43:167] )

合計以外の関数を使用する場合は、行または列に一般的な関数を適用するための ?apply を参照してください。

于 2010-10-21T21:17:32.953 に答える
9

データ テーブル内のすべての列の合計を取得し、上記のソリューションを実装する際に問題が発生する方法を見つけたいと思ってここに来ました。すべての列の合計で列を追加する方法は、次のcbind関数を使用します。

cbind(data, total = rowSums(data))

この方法は、データに列を追加totalし、上記のソリューションを使用してすべての列を合計しようとしたときに発生する配置の問題を回避します (この問題の説明については、以下の投稿を参照してください)。

マトリックスエラーに新しい列を追加する

于 2018-07-13T00:30:09.790 に答える
1

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
于 2021-12-03T10:30:43.247 に答える