使用 Dplyr 和 Tidyverse 创建一个 Table,其中包含交替的总行,后跟子行

Create a Table with Alternating Total Rows Followed by Sub-Rows Using Dplyr and Tidyverse

library(dplyr)
library(forcats) 

使用下面的简单数据框和代码,我想创建一个包含总行数和子行数的 table。例如,第一行将是来自 NEW 列的 "Region1" 和来自 TotNumber 列的 70,然后在其下方将是 "Town1"、"Town2" 和 "Town3" 的三行,以及它们在“数字”列中的相关数字,"Region2" 和 "Region3" 也是如此。我附上了一张想要的照片 table...

我也在寻找使用 dplyr 和 Tidyverse 的解决方案。

Number<-c(10,30,30,10,56,30,40,50,33,10)
Town<-("Town1","Town2","Town3","Town4","Town5","Town6","Town7","Town8","Town9","Town10")

DF<-data_frame(Town,Number)


DF<-DF%>%mutate_at(vars(Town),funs(as.factor))

要创建区域变量...

DF<-DF%>%mutate(NEW=fct_collapse(Town,
Region1=c("Town1","Town2","Town3"),
Region2=c("Town4","Town5","Town6"),
Region3=c("Town7","Town8","Town9","Town10")))%>%
group_by(NEW)%>%
summarise(TotNumber=sum(Number))

修改最后的管道并添加一些附加步骤:

library(dplyr)
library(forcats) 
DF%>%mutate(NEW=fct_collapse(Town,
                                 Region1=c("Town1","Town2","Town3"),
                                 Region2=c("Town4","Town5","Town6"),
                                 Region3=c("Town7","Town8","Town9","Town10")),
            NEW = as.character(NEW)) %>%
  group_by(NEW) %>%
  mutate(TotNumber=sum(Number))  %>%
  ungroup() %>%
  split(.$NEW) %>%
  lapply(function(x) rbind(setNames(x[1,3:4], names(x)[1:2]), x[1:2])) %>%
  do.call(rbind, .) 

结果:

# A tibble: 13 × 2
      Town Number
*    <chr>  <dbl>
1  Region1     70
2    Town1     10
3    Town2     30
4    Town3     30
5  Region2     96
6    Town4     10
7    Town5     56
8    Town6     30
9  Region3    133
10   Town7     40
11   Town8     50
12   Town9     33
13  Town10     10

数据:

Number<-c(10,30,30,10,56,30,40,50,33,10)
Town<-c("Town1","Town2","Town3","Town4","Town5","Town6","Town7","Town8","Town9","Town10")

DF<-data_frame(Town,Number) %>%
  mutate_at(vars(Town),funs(as.factor))