总结数据并在下面显示原始数据

Summarizing data and also showing the raw data below

假设我有这样的数据

  vehicle <- c(1,2)
  no_of_visits <- c(3,2,4,3,1)
  duration <- c(20,30,18,15,20)
  bind <- cbind(vehicle, no_of_visits, duration)

 vehicle| no_of_visits | duration
  ----------------
   1 | 3 | 20
  ------------
   1 | 2 | 30
  ------------
   1 | 4 | 18
  -----------
   2 | 3 | 15
  -----------
   2 | 1 | 20
  -----------

并且,在这一行中我想显示汇总值,在下面我想显示那些汇总值

现在,它应该是这样的

  vehicle|no_of_visits|duration
 ----------------------------
          1 | 9 | 68
          --------
          --------
          1 | 3 | 20
          --------
          1 | 2 | 30
          --------
          1 | 4 | 18
           -------
          2 | 4 | 35
           -------
           -------
          2 | 3 | 15
           -------
          2 | 1 | 2
           -------

如何让它发挥作用?

谢谢

您可以 summarize,然后 bind_rows 使用原始数据框:

bind_df <- as.data.frame(bind)

bind_df %>% 
    group_by(vehicle) %>% 
    summarise_all(sum) %>% 
    bind_rows(bind_df) %>% 
    arrange(vehicle)

# A tibble: 7 x 3
#  vehicle no_of_visits duration
#    <dbl>        <dbl>    <dbl>
#1       1            9       68
#2       1            3       20
#3       1            2       30
#4       1            4       18
#5       2            4       35
#6       2            3       15
#7       2            1       20

通过使用dplyr

library(dplyr)

bind=data.frame(bind)
target=rbind(bind,bind%>%group_by(vehicle)%>%dplyr::summarise_all(sum)
target=target[order(target$vehicle,-target$no_of_visits),]

target
  vehicle no_of_visits duration
6       1            8       58
3       1            4       18
1       1            3       20
5       1            1       20
7       2            5       45
4       2            3       15
2       2            2       30

编辑:您的附加要求

vehicle <- c(1,2)
no_of_visits <- c(3,2,4,3,1)
duration <- c(20,30,18,15,20)
drivername <- c('a','b') 
bind <- cbind(vehicle, no_of_visits, duration,drivername)
bind=data.frame(bind,stringsAsFactors = F)
bind$vehicle=as.numeric(as.character(bind$vehicle))
bind$no_of_visits=as.numeric(as.character(bind$no_of_visits))
bind$duration=as.numeric(as.character(bind$duration))
bind$drivername=(as.character(bind$drivername))

第一个选项:

target=rbind(bind,data.frame(bind%>%group_by(vehicle,drivername)%>%dplyr::summarise_all(sum)))

target[order(target$vehicle,-target$no_of_visits),]

  vehicle no_of_visits duration drivername
6       1            8       58          a
3       1            4       18          a
1       1            3       20          a
5       1            1       20          a
7       2            5       45          b
4       2            3       15          b
2       2            2       30          b

第二个选项

bind1=bind %>% 
    group_by(vehicle) %>% 
    summarise_each(funs(if(is.numeric(.)) sum(., na.rm = TRUE) else first(.)))

target=rbind(bind,bind1)
target[order(target$vehicle,-target$no_of_visits),]
  vehicle no_of_visits duration drivername
6       1            8       58          a
3       1            4       18          a
1       1            3       20          a
5       1            1       20          a
7       2            5       45          b
4       2            3       15          b
2       2            2       30          b