dplyr で複数の列の合計を計算する 質問する

dplyr で複数の列の合計を計算する 質問する

私の質問は、データ フレームの複数の列にわたって値を合計し、 を使用してこの合計に対応する新しい列を作成することです。列のデータ エントリはバイナリ (0,1) です。 のまたは関数の行方向dplyrの類似物を考えています。以下は、データ フレームの最小限の例です。summarise_eachmutate_eachdplyr

library(dplyr)
df=data.frame(
  x1=c(1,0,0,NA,0,1,1,NA,0,1),
  x2=c(1,1,NA,1,1,0,NA,NA,0,1),
  x3=c(0,1,0,1,1,0,NA,NA,0,1),
  x4=c(1,0,NA,1,0,0,NA,0,0,1),
  x5=c(1,1,NA,1,1,1,NA,1,0,1))

> df
   x1 x2 x3 x4 x5
1   1  1  0  1  1
2   0  1  1  0  1
3   0 NA  0 NA NA
4  NA  1  1  1  1
5   0  1  1  0  1
6   1  0  0  0  1
7   1 NA NA NA NA
8  NA NA NA  0  1
9   0  0  0  0  0
10  1  1  1  1  1

次のようなものが使えます:

df <- df %>% mutate(sumrow= x1 + x2 + x3 + x4 + x5)

しかし、これには各列の名前を書き出す必要があります。列は 50 個ほどあります。さらに、この操作を実装するループのさまざまな反復で列名が変わるため、列名を指定しなくても済むようにしたいと考えています。

どうすれば最も効率的に実行できますか? ご協力いただければ幸いです。

ベストアンサー1

dplyr >= 1.0.0 使用時

各行を合計しますrowSumsrowwise任意の集約に機能しますが、速度は遅くなります)

df %>%
   replace(is.na(.), 0) %>%
   mutate(sum = rowSums(across(where(is.numeric))))

各列を合計する

df %>%
   summarise(across(everything(), ~ sum(., na.rm = TRUE)))

dplyr < 1.0.0

各行を合計する

df %>%
   replace(is.na(.), 0) %>%
   mutate(sum = rowSums(.[1:5]))

各列を合計して置き換えられた summarise_all:

df %>%
   replace(is.na(.), 0) %>%
   summarise_all(funs(sum))

おすすめ記事