データ行の合計を計算する
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 (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を復元する
Last updated 2021-05-05 | auditR (c) N.Nawata