2017-09-08 50 views
0

我有以下R中數據幀如何做一個GROUPBY和dplyr數出現次數

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中執行此操作?

+0

https://開頭計算器。 com/questions/22767893/find-number-of-rows-using-dplyr-group-by –

+2

如何獲得'ctr_no'?根據我的理解,「ERT09」和「QRT34」是有意義的。另外'truck_no'不應該是'ABC123'和'ERT123'? – Sotos

+0

「時間是平均值」是什麼意思? –

回答

4

這裏有一個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 
+0

您的結果與預期結果不同。 – Lyngbakr

+0

@Lyngbakr,你是對的。預計的產出目前似乎有點不清楚。 –

相關問題