我们可以用R函数在同一个函数中按多列分组吗?

问题描述 投票:0回答:1

使用这个数据集。

sex <- c("M","F","M","M","F","F","F","M","M","F") 
school <- c("north","north","central","south","south","south","central","north","north","south")
school_type <- c("high","high","primary","secondary","secondary","secondary","primary","high", "high","secondary")
days_missed <- c(5,1,2,0,7,1,3,2,4,15)

df <- data.frame(sex, school, school_type,days_missed, stringsAsFactors = F)

col1 <- c( 'school_type')
col2 <- c('school','sex')

我们能不能把数据框按照 col1 然后将所得的每个数据帧按 col2 创建一个输出,如。

$high .x
school      sex     sum
north       F       1
north       M       11

$primary .x
school      sex     sum
central     F       3
central     M       2

$seconday .x
school      sex     sum
south       F       23
south       M        0

我试过了

purrr::map(.x=col1, .f = ~df %>% group_by_at(.x) %>%group_by(col2) %>% summarise(sum = sum(days_missed)))

输入和建议是赞赏

r dplyr purrr
1个回答
2
投票

在基础R中你可以做到。

xtabs(reformulate(c(col2,col1),"days_missed"),df) 

如果你的R版本是>4.0.0,那么你可以在其中加入 asplit 函数,将其作为一个列表。

asplit(xtabs(reformulate(c(col2,col1),"days_missed"),df),3)

$high
         sex
school    F  M
  central 0  0
  north   1 11
  south   0  0

$primary
         sex
school    F M
  central 3 2
  north   0 0
  south   0 0

$secondary
         sex
school     F M
  central  0 0
  north    0 0
  south   23 0

2
投票
library(dplyr)
library(tidyr)

sex <- c("M","F","M","M","F","F","F","M","M","F") 
school <- c("north","north","central","south","south","south","central","north","north","south")
school_type <- c("high","high","primary","secondary","secondary","secondary","primary","high", "high","secondary")
days_missed <- c(5,1,2,0,7,1,3,2,4,15)

df <- data.frame(sex, school, school_type,days_missed, stringsAsFactors = F)

df2 <- df %>% group_by(school_type, school, sex) %>% summarise(days_missed = sum(days_missed)) %>% ungroup()

split(select(df2, -school_type), df2$school_type)
© www.soinside.com 2019 - 2024. All rights reserved.