使用不同的组规则自动执行 group_by 函数
Posted
技术标签:
【中文标题】使用不同的组规则自动执行 group_by 函数【英文标题】:automate group_by function with different group rules r 【发布时间】:2021-11-14 07:59:46 【问题描述】:grade | year | campus | TestType | OriginalScore |
---|---|---|---|---|
fresh | 2021 | FL | reading | 80 |
fresh | 2021 | NY | reding | 85 |
senior | 1999 | FL | writing | 100 |
senior | 1999 | FL | writing | 95 |
fresh | 1999 | FL | reading | 100 |
我有不同的数据框来存储考试成绩和上述其他信息。上面是一个英语玩具表,作为测试类别。我需要做的是通过按年级、年份、校园等对分数进行分组来计算平均值和标准差,如下所示:
aggEnglishTable <- dfEng %>%
group_by (grade, TestType) %>%
summarize_at(vars(OriginalScore) funs(mean, sd))
但是,根据学科的不同,比如(数学、SAT、外语等),我需要不同的分组规则。我创建了一个元表来记录不同的分组规则,如下所示:
TestCategory | grade | year | campus | TestType |
---|---|---|---|---|
English | 1 | 0 | 0 | 1 |
Math | 1 | 1 | 1 | 1 |
SAT | 0 | 1 | 1 | 0 |
我想知道如何通过将元分组规则表中的信息映射到 group_by 命令来自动执行此过程。我可以从元组规则表中提取的列名是字符串,但是如何将其变成 group_by 命令可以接收的内容?
谢谢你帮助我。
【问题讨论】:
请包含一个适当的可重复示例,其中包含包含所有 TestCategories 的原始较大数据框。 您的数据应该作为代码提供,而不是作为格式化表格。请使用dput(data)
什么是TestCategory
?
就像主题。与英语作为一个类别一样,它具有包括阅读和写作在内的测试类型。不同的类别有自己的分组规则。
所以和TestType
没有关系?
【参考方案1】:
一个快速的答案是使用数据框和分组变量作为参数创建一个函数。使用group_by_at
允许您传递字符串以对数据框进行分组。
dfEng <-
data.frame(grade = c('fresh', 'fresh', 'senior', 'senior', 'fresh'),
year = c(2021, 2021, 1999, 1999, 1999),
campus = c('FL', 'NY', rep('FL',3)),
OriginalScore = c(80, 85, 100, 95, 100))
fn_summarize <- function(df_in, grouping_vars)
df_in %>%
group_by_at(vars(all_of(grouping_vars))) %>%
summarize_at(vars(OriginalScore), list(mean = mean, sd = sd)) %>%
ungroup() %>%
return()
aggEnglishTable <- fn_summarize(dfEng, c('grade', 'year'))
那么对于其余的科目,您只需按照最后一行:
aggMathTable <- fn_summarize(dfMath, c('grade', 'year', 'campus'))
请记住以后在您的问题中放入示例数据。
【讨论】:
以上是关于使用不同的组规则自动执行 group_by 函数的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 group_by 中的 group-number 对数据表进行编号/标记?
R语言使用dplyr包使用group_by函数summarise函数和mutate函数计算分组下的均值标准差样本个数以及分组均值的95%执行区间对应的下限值和上限值(Calculate CI)