dplyr group_by цикл через разные столбцы - PullRequest
0 голосов
/ 14 марта 2019

У меня есть следующие данные:

enter image description here

Я хотел бы создать три разных кадра данных с помощью group_by и суммировать функции dplyr.Это будут df_Sex, df_AgeGroup и df_Type.Для каждого из этих столбцов я хотел бы выполнить следующую функцию;

 df_Sex =  df%>%group_by(Sex)%>%summarise(Total = sum(Number))

Есть ли способ использования apply или lapply для передачи имен каждого из этих трех столбцов (Sex, AgeGrouping и Type) в эти три кадра данных?

Ответы [ 2 ]

2 голосов
/ 14 марта 2019

Это будет работать, но создаст список фреймов данных в качестве вашего вывода

### Create your data first    

df <- data.frame(ID = rep(10250,6), Sex = c(rep("Female", 3), rep("Male",3)), 
                     Population = c(rep(3499, 3), rep(1163,3)), AgeGrouping =c(rep("0-14", 3), rep("15-25",3)) , 
                     Type = c("Type1", "Type1","Type2", "Type1","Type1","Type2"), Number = c(260,100,0,122,56,0))

gr <- list("Sex", "AgeGrouping","Type")

df_list <- lapply(gr, function(i) group_by(df, .dots=i) %>%summarise(Total = sum(Number)))
1 голос
/ 14 марта 2019

Вот способ сделать это:

f <- function(x) {
     df %>% 
         group_by(!!x) %>% 
         summarize(Total = sum(Number))
}

lapply(c(quo(Sex), quo(AgeGrouping), quo(Type)), f)

Возможно, есть лучший способ сделать это, я не особо задумывался над этим.Я лично предпочел бы это:

library(data.table)
DT <- as.data.table(df)
lapply(c("Sex", "AgeGrouping", "Type"), 
       function(x) DT[, .(Total = sum(Number)), by = x])
...