トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン 印刷

行の合計

auditR

データ行の合計を計算する

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