【问题标题】:dplyr conditional summarisedplyr 条件总结
【发布时间】:2021-08-17 13:44:01
【问题描述】:

我有一个可行的解决方案,但是在汇总数据时是否有一个 cleaner 或更多 efficient 一个?

如下数据框:

set.seed(101)
dtf <- data.frame(group=rep(c("A", "B", "C"),each=5),
                  item_id=sample(1:1000,size = 15,replace = F),
                  days_to_sale=sample(1:20,size = 15,replace = T))

我计算下表(计数是累积的)

group count_items sold_in_1_d sold_in_5_d sold_in_20_d
A 5 0 3 5
B 5 1 1 5
C 5 0 0 5

使用此代码

dtf%>%
  group_by(group)%>%
  summarise(count_total=n(),
         sold_in_1_d= length(days_to_sale[days_to_sale<=1]),
         sold_in_5_d= length(days_to_sale[days_to_sale<=5]),
         sold_in_20_d= length(days_to_sale[days_to_sale<=20]))

但我想将 length() 更改为 n() 并可能缩短子集?

有更好、更清洁的解决方案吗?

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    我认为在 dtf 中添加新变量而不是在汇总部分执行它更简单:

    dtf$day_sale_1 <- dtf$days_to_sale <= 1
    dtf$day_sale_5 <- dtf$days_to_sale <= 5
    dtf$day_sale_20 <- dtf$days_to_sale <= 20
    
    dtf %>% group_by(group) %>% 
    summarise(sold_in_day1 = sum(day_sale_1), 
              sold_in_day5= sum(day_sale_5), 
              sold_in_day20 = sum(day_sale_20))
    
      group  day1  day5 day20
      <chr> <int> <int> <int>
    1 A         0     3     5
    2 B         1     1     5
    3 C         0     0     5
    

    【讨论】:

      猜你喜欢
      • 2017-09-14
      • 2021-06-30
      • 2019-07-16
      • 1970-01-01
      • 2020-03-30
      • 2018-10-06
      • 2018-07-19
      • 2020-02-07
      • 1970-01-01
      相关资源
      最近更新 更多