2016-12-14 57 views
0

我想計算數據幀中的零。如何使用dplyr計算每列中的零值?

要算來港我使用

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

返回

# 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))) 

來實現同樣的結果,而是計數爲零來港?

回答

3

因爲.會在這種情況下,一個向量,你可以只使用一個邏輯測試和sum因爲TRUE是爲1和FALSE處理是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

我試過,但我又檢查 – pachamaltese

+0

最終'summarise_each'會贊成summarise_all'的'被棄用,但這裏有一個簡易替換。 – alistaire

+0

我確實嘗試了不同的數據集,並且這可以工作 – pachamaltese

4

我們也可以做到這一點在base R

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]