【问题标题】:add count of zeros by group using dplyr使用 dplyr 按组添加零计数
【发布时间】:2019-07-18 19:41:03
【问题描述】:

我有一个非常大的数据框,我需要按品牌进行过滤,其中包含超过 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

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

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    不要将add_count 用作第二个条件。可以直接使用sum

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

    【讨论】:

      【解决方案2】:

      无需添加nnn 列进行过滤。你可以直接filter如下:

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

      【讨论】:

        猜你喜欢
        • 2021-10-01
        • 2014-05-11
        • 2021-10-18
        • 2014-11-15
        • 1970-01-01
        • 1970-01-01
        • 2015-04-13
        • 2014-06-20
        相关资源
        最近更新 更多