R 合計がゼロになるデータフレームの列の削除
やりたいこと
データフレームを使っているとき、合計がゼロとなる不要な列が出てきた場合その列を除外したい。例えば、以下のようなデータがあったとき、合計がゼロとなるC列・E列を除外したい。
> #テストデータ > dat <- data.frame( A = seq(1, 10), B = seq(2, 20, 2), C = rep(0, 10), D = seq(3, 30, 3), E = rep(0, 10) ) > #出力 > dat A B C D E 1 1 2 0 3 0 2 2 4 0 6 0 3 3 6 0 9 0 4 4 8 0 12 0 5 5 10 0 15 0 6 6 12 0 18 0 7 7 14 0 21 0 8 8 16 0 24 0 9 9 18 0 27 0 10 10 20 0 30 0
対処方法
colSums() で弾いちゃえば良い。colSums() を使うとデータフレームの各列の合計を返してくれる。
> colSums(dat) A B C D E 55 110 0 165 0
これを活用して、データフレームの列を指定すればOK。
> dat[colSums(dat)!=0] A B D 1 1 2 3 2 2 4 6 3 3 6 9 4 4 8 12 5 5 10 15 6 6 12 18 7 7 14 21 8 8 16 24 9 9 18 27 10 10 20 30