- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
! データ行の合計を計算する
Rはベクトル単位の計算はとても便利な関数が揃っているが、行単位で演算しようとすると途端に面倒になる。
会計でよく使う、縦計・横計でも同様で、縦計はいろいろできるが横計は辛い。
データ
df_sample <- tibble(
ID = c("a", "b", "c", "d", "e", "f"),
A1 = c(1, NA, NA, NA, NA, NA),
A2 = c(NA, 1, NA, NA, NA, NA),
A3 = c(NA, NA, 1, NA, NA, NA),
B1 = c(NA, NA, NA, 1, NA, NA),
B2 = c(NA, NA, NA, NA, 1, NA),
B3 = c(NA, NA, NA, NA, NA, 1)
)
! rowSums()は行列が対象
! rowSums()は数値型が対象なので項目を選択する
rowSums (x, na.rm = FALSE, dims = 1)
この場合、xは行列でなければ機能しない。つまりtibbleでは動作しない。
df_sample %>% select(-ID) %>% #文字型の項目を除く
mutate(Sum = rowSums(., na.rm = T)) #NAを外す
として、数値のみを対象とする。
! 原理的な方法(各列を足す)
> df_sample %>%
replace_na(replace = list(A1 = 0, A2 = 0, A3 = 0, B1 = 0, B2 = 0, B3 = 0)) %>%
mutate(score = sum(A1:B3))
! 行列への関数を一括適用する方法
df %>% select_if(is.numeric) %>%
apply(1, sum, na.rm = TRUE)
! とりあえず見出している方法
処理
df_sample %>% nest(-ID) %>% # ID以外をまとめて一つのデータの塊dataとする
mutate(score = map(data, sum, na.rm=T)) %>% #dataに合計sumを適用(NAを除く)してscoreに代入する
unnest() # まとめたdataを復元する