使用dplyr按组添加零的计数

relj7zay  于 2023-05-20  发布在  其他
关注(0)|答案(2)|浏览(98)

我有一个非常大的数据框架,我需要按品牌过滤,其中有50多个可用行,列估值中的零值少于10个。我用dplyr
可复制的例子

library(dplyr)
library(magrittr)

df <- data.frame(brand=c("Advert","Advert","Bass","Bass","Bass"),
                 date=c("2019-07-15","2019-08-15","2018-01-01","2018-02-15","2015-01-10"),
                 valuation=c(0,1,0,1,1))

# What I have reached so far...

 df %>% dplyr::add_count(brand) %>% group_by(brand) %>% add_count(valuation==0)

>  df %>% dplyr::add_count(brand) %>% group_by(brand) %>% add_count(valuation==0)
# A tibble: 5 x 6
# Groups:   brand [2]
  brand  date       valuation     n `valuation == 0`    nn
  <fct>  <fct>          <dbl> <int> <lgl>            <int>
1 Advert 2019-07-15         0     2 TRUE                 1
2 Advert 2019-08-15         1     2 FALSE                1
3 Bass   2018-01-01         0     3 TRUE                 1
4 Bass   2018-02-15         1     3 FALSE                2
5 Bass   2015-01-10         1     3 FALSE                2

我将使用列“n”来过滤超过50行的品牌,但请注意列“nn”中的预期结果应为:

1
1
1
1
1

事实上,我需要计算的比例零价值的品牌组,但我坚持计数零的品牌

5lhxktic

5lhxktic1#

不要使用add_count作为第二个标准。可以直接使用sum

df %>% 
  dplyr::add_count(brand) %>% 
  group_by(brand) %>% 
  mutate(nn = sum(valuation == 0))
noj0wjuj

noj0wjuj2#

不需要添加nnn列进行筛选。您可以直接filter如下所示:

df %>%
  group_by(brand) %>% 
  filter(n()>50,sum(valuation==0)<10)

相关问题