2017-09-21 3 views
1
library(dplyr) 
library(forcats) 

en utilisant la simple dataframe et le code ci-dessous, je veux créer un tableau avec des lignes au total et sous-lignes. Par exemple, la première ligne serait «Region1» de la colonne NEW et 70 de la colonne TotNumber, puis plus bas, trois lignes pour «Town1», «Town2» et «Town3», et leurs numéros associés dans le champ Number colonne, et la même chose pour "Region2" et "Region3". J'ai joint une photo de la table désirée ... enter image description hereCréer une table avec Alternant lignes au total Suivi par sous-lignes à l'aide Dplyr et Tidyverse

Je suis également à la recherche d'une solution utilisant dplyr et 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)) 

Pour créer la variable Région ...

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)) 
+0

Est-ce que ma réponse semble utile pour vous? – useR

Répondre

0

Modifier vos derniers tuyaux et en ajoutant quelques étapes d'ajout:

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, .) 

Résultats:

# 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 

données:

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))