如何在dplyr中执行groupby和计数出现次数

如何在dplyr中执行groupby和计数出现次数,r,dplyr,R,Dplyr,我在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

我在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和R,然后按上面的方式粘贴 时间被视为平均值。
我如何在dplyr中完成它

以下是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

以下是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

您如何获得
ctr\u no
?根据我的理解,成为
ERT09
QRT34
是有意义的。另外,
truck\u no
不应该是
ABC123
ERT123
?什么是“平均时间”?@docendodiscimus我认为你的答案是正确的。OP把预期的输出搞砸了IMO@Sotos,我暂时取消了我的答案。让我们看看OP是否会在某个时候做出澄清的回应。您如何获得ctr\U no?根据我的理解,成为
ERT09
QRT34
是有意义的。另外,
truck\u no
不应该是
ABC123
ERT123
?什么是“平均时间”?@docendodiscimus我认为你的答案是正确的。OP把预期的输出搞砸了IMO@Sotos,我暂时取消了我的答案。让我们看看OP是否会在某个时候做出澄清的回应。你的结果与期望的结果不同。@Lyngbakr,你是对的。目前预期的输出似乎有点不清楚。您的结果与预期的结果不同。@Lyngbakr,您是对的。目前,预期产出似乎有点不清楚。