如何使用dplyr在每列中计算零?

时间:2016-12-14 05:16:24

标签: r dplyr

我想在数据帧中计算零。

使用

计算我的NAs
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)))

实现相同的结果,但是计算零而不是NA?

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分: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