ひろがりモンステラ

家のモンステラが凄いことになってる社内SEの雑記ブログです。

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