2016-12-14 4 views
0

Ich möchte Nullen in einem Datenrahmen zählen.Wie zählen Nullen in jeder Spalte mit dplyr?

Nas zählen Ich verwende

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

die

# 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 

zurück Wie kann ich so etwas wie

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

tun das gleiche Ergebnis zu erzielen, aber das Zählen Nullen statt NAs?

Antwort

3

weil die . ein Vektor in diesem Fall werden Sie nur einen logischen Test und sum verwenden können, weil TRUE als 1 behandelt und FALSE ist ein 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

habe ich versucht, dies aber ich bin Überprüfung wieder – pachamaltese

+0

Schließlich 'summarise_each' zugunsten werden veraltet wird von' summarise_all', aber es ist ein Drop-in-Ersatz hier. – alistaire

+0

Ich habe verschiedene Datensätze getestet und das funktioniert – pachamaltese

4

Wir können dies auch in 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 

Oder mit 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 

Oder mit data.table

library(data.table) 
as.data.table(mtcars)[, lapply(.SD, function(x) sum(x==0)) , cyl] 
Verwandte Themen