我想在数据帧中计算零。
使用
计算我的NAsmtcars %>% 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?
答案 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