私の質問は、データ フレームの複数の列にわたって値を合計し、 を使用してこの合計に対応する新しい列を作成することです。列のデータ エントリはバイナリ (0,1) です。 のまたは関数の行方向dplyr
の類似物を考えています。以下は、データ フレームの最小限の例です。summarise_each
mutate_each
dplyr
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 使用時
各行を合計しますrowSums
(rowwise
任意の集約に機能しますが、速度は遅くなります)
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))