说我的数据看起来像这样
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
-------
如何让它发挥作用?
由于
答案 0 :(得分: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
答案 1 :(得分:2)
使用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