使用不同的组规则自动执行 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 函数的主要内容,如果未能解决你的问题,请参考以下文章

了解 dplyr 和 group_by

如何通过 group_by 中的 group-number 对数据表进行编号/标记?

根据“调整后的 group_by”创建一列 - R

R语言使用dplyr包使用group_by函数summarise函数和mutate函数计算分组下的均值标准差样本个数以及分组均值的95%执行区间对应的下限值和上限值(Calculate CI)

自定义函数与dplyr变异或汇总因子中的不同级别?

是否有 C# 自动格式化程序可用于定义自定义格式化规则?