【问题标题】:how to do a groupby and count number of occurrences in dplyr如何在 dplyr 中进行分组并计算出现次数
【发布时间】:2018-02-17 08:47:12
【问题描述】:

我在 R 中有以下数据框

 truck_no     start_time         end_time           ctr_no    time     type
  ABC123      20-05-2016 06:53   20-05-2016 08:53   ERT09      1.67      D
  ABC123      20-05-2016 06:53   20-05-2016 08:53   TRT12      1.67      R
  ABC123      20-05-2016 06:53   20-05-2016 08:53   ERT34      1.67      R
  ABC123      20-05-2016 06:53   20-05-2016 08:53   ERT33      1.67      D
  ERT123      21-05-2016 06:53   21-05-2016 08:53   QRT34      2.67      R
  ERT123      21-05-2016 06:53   21-05-2016 08:53   PRT33      2.67      D

现在我想要的数据框是

 truck_no     start_time         end_time           ctr_no   time    type
  ABC123      20-05-2016 06:53   20-05-2016 08:53   ERT09    1.67    2D2R
  ABC123      20-05-2016 06:53   20-05-2016 08:53   TRT12    2.67    1R1D

我要数D's and R's并按上述方式粘贴 时间取平均值。 我怎样才能在 dplyr 中做到这一点?

【问题讨论】:

  • 您如何获得ctr_no?据我了解,成为ERT09QRT34 是有意义的。还有truck_no 不应该是ABC123ERT123
  • “平均时间”是什么意思?
  • @docendodiscimus 我认为您的回答是正确的。 OP 搞砸了 IMO 的预期输出
  • @Sotos,我暂时取消了我的答案。让我们看看 OP 是否会在某个时候做出回应澄清。

标签: r dplyr


【解决方案1】:

这是一个 dplyr 方法:

foo <- function(x) {y <- table(x); paste(rbind(y, names(y)), collapse = "")}

df %>% 
  group_by(truck_no) %>% 
  mutate(type = foo(type)) %>% 
  summarise_all(first)

## A tibble: 2 x 5
#  truck_no       start_time         end_time ctr_no  type
#    <fctr>           <fctr>           <fctr> <fctr> <chr>
#1   ABC123 20-05-2016 06:53 20-05-2016 08:53  ERT09  2D2R
#2   ERT123 21-05-2016 06:53 21-05-2016 08:53  QRT34  1D1R

如果您希望开始和结束时间是每个 truck_no 的平均值,您可以使用以下扩展名:

df %>% 
  group_by(truck_no) %>% 
  mutate_at(vars(ends_with("_time")), 
            ~mean(as.POSIXct(as.character(.), format="%d-%m-%Y %H:%M"))) %>% 
  mutate(type = foo(type)) %>% 
  summarise_all(first)
## A tibble: 2 x 5
#  truck_no          start_time            end_time ctr_no  type
#    <fctr>              <dttm>              <dttm> <fctr> <chr>
#1   ABC123 2016-05-20 06:53:00 2016-05-20 08:23:00  ERT09  2D2R
#2   ERT123 2016-05-21 06:53:00 2016-05-21 08:53:00  QRT34  1D1R

【讨论】:

  • 您的结果与期望的结果不同。
  • @Lyngbakr,你是对的。目前预期的输出似乎有点不清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多