2016-12-14 8 views
0

データフレーム内のゼロを数えたいと思います。私はdplyrを使用して各列のゼロを数える方法は?

# A tibble: 3 × 11 
    cyl mpg disp hp drat wt qsec vs am gear carb 
    <dbl> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> 
1  4  0  0  0  0  0  0  0  0  0  0 
2  6  0  0  0  0  0  0  0  0  0  0 
3  8  0  0  0  0  0  0  0  0  0  0 

私は同じ結果を達成するために

mtcars %>% group_by(cyl) %>% summarise_each(funs(sum(identical(.,0))) 

のようなものをどのように行うことができますが、ゼロを数える代わりにを返し

mtcars %>% group_by(cyl) %>% summarise_each(funs(sum(is.na(.)))) 

を使用していNASにカウントする

NA?

答えて

3

.TRUEは1として扱われ、FALSEは、我々はまた、base Rでこれを行うことができます0

mtcars %>% 
    group_by(cyl) %>% 
    summarise_each(funs(sum(.==0))) 

    cyl mpg disp hp drat wt qsec vs am gear carb 
    (dbl) (int) (int) (int) (int) (int) (int) (int) (int) (int) (int) 
1  4  0  0  0  0  0  0  1  3  0  0 
2  6  0  0  0  0  0  0  3  4  0  0 
3  8  0  0  0  0  0  0 14 12  0  0 
+0

と私はこれを試してみましたが、私は最終的に 'summarise_each'がsummarise_all''のために廃止されようとしているが、それはドロップイン置換ここだ再び – pachamaltese

+0

をチェックしています。 – alistaire

+0

私は別のデータセットを試してみましたが、これは動作します – pachamaltese

4

あるので、あなただけの論理テストとsumを使用することができ、この場合のベクトルになりますので、

aggregate(.~cyl, mtcars, FUN = function(x) sum(x==0)) 
# cyl mpg disp hp drat wt qsec vs am gear carb 
#1 4 0 0 0 0 0 0 1 3 0 0 
#2 6 0 0 0 0 0 0 3 4 0 0 
#3 8 0 0 0 0 0 0 14 12 0 0 

かとrowsum

rowsum(+(mtcars[-2]==0), group = mtcars$cyl) 
#  mpg disp hp drat wt qsec vs am gear carb 
#4 0 0 0 0 0 0 1 3 0 0 
#6 0 0 0 0 0 0 3 4 0 0 
#8 0 0 0 0 0 0 14 12 0 0 

それともdata.table

library(data.table) 
as.data.table(mtcars)[, lapply(.SD, function(x) sum(x==0)) , cyl] 
関連する問題