【问题标题】:R question: how to save summary results into a datasetR问题:如何将汇总结果保存到数据集中
【发布时间】:2019-07-14 03:27:51
【问题描述】:

我是一名尝试学习 R 的 SAS 程序员。如果是 SAS,我会这样做以将描述性统计的结果保存到数据集中:

proc means data=abc;
var var1 var2 var3;
ods output summary=result1;
run;

我认为在 R 中,应该是这样的: 摘要(abc)->结果1

有人告诉我这样做。 as.data.frame(unclass(summary(new_scales)))->new_table

但是这个表中的结果不是很有用。

是否可以像从 SAS PROC MEANS 那样获得更好的结构化结果?我希望列看起来像: 变量名、平均值、标准差、最小值、最大值等。 和列携带来自每个变量的结果。

【问题讨论】:

    标签: r summary


    【解决方案1】:

    考虑sapply(隐藏循环以返回等长对象作为输入)创建聚合结果矩阵:

    # SINGLE AGGREGATE
    stats_vector <- sapply(abc[c("var1", "var2", "var3")], function(x) mean(x, na.rm=TRUE)))
    
    # MULTIPLE AGGREGATES
    stats_matrix <- sapply(abc[c("var1", "var2", "var3")], 
        function(x) c(count=length(x), sum=sum(x), mean=mean(x), min=min(x), 
                      q1=quantile(x)[2], median=median(x), q3=quantile(x)[4], 
                      max=max(x), sd=sd(x)))
    )
    

    如果您的proc means 使用class 进行分组,则使用返回数据框的aggregate

    # SINGLE AGGREGATE
    mean_df <- aggregate(cbind(var1, var2, var3) ~ group, abc, function(x) mean(x, na.rm=TRUE)))
    
    # MULTIPLE AGGREGATES
    agg_raw <- aggregate(cbind(var1, var2, var3) ~ group, abc, 
        function(x) c(count=length(x), sum=sum(x), mean=mean(x), min=min(x), 
                      q1=quantile(x)[2], median=median(x), q3=quantile(x)[4], 
                      max=max(x), sd=sd(x)))
    )
    
    agg_df <- do.call(data.frame, agg_raw)
    

    Rextester demo

    【讨论】:

    • 我试过这个:#SINGLE AGGREGATE sapply(abc[c("GrowthMindset", "SelfEfficacy", "MSelfEfficacy","MathAnxiety","TeacherUse")], mean) 我得到了这个: GrowthMindset SelfEfficacy MSelfEfficacy MathAnxiety TeacherUse NA NA NA NA NA 我不知道为什么会这样。数据确实有缺失值。
    • 查看使用na.rm=TRUE 参数mean 的更新。对多个聚合执行相同操作。
    • 谢谢!我几乎可以使用多个聚合的聚合语句。 1)我如何得到n? n(x) 不起作用。 2)如果我想将结果保存到数据集中,我会做“-> newdata”吗?它不是让我只保存手段(但不是其他统计数据,如 sd)。
    • 请参阅更新添加分配给每个 aggregate 的多个函数的特殊处理。并使用length 函数进行计数。
    【解决方案2】:

    考虑 tidyverse 方法。想法是将数据传递到线性回归等方程中,然后将模型结果映射到模型值,最后将摘要存储到数据框中。

    library(tidyverse)
    library(broom)
    summary_result<-mtcars %>%
      nest(-carb) %>%
      mutate(model = purrr::map(data, function(x) {
        lm(gear ~ mpg+cyl, data = x)}),
        values = purrr::map(model, glance),
        r.squared = purrr::map_dbl(values, "r.squared"),
        pvalue = purrr::map_dbl(values, "p.value")) %>%
      select(-data, -model, -values)
    
    summary_result
    
      carb r.squared   pvalue
    1    4    0.4352 0.135445
    2    1    0.7011 0.089325
    3    2    0.8060 0.003218
    4    3    0.5017 0.498921
    5    6    0.0000       NA
    6    8    0.0000       NA
    

    【讨论】:

    • 我会尽快尝试这种方法,并让您知道结果如何。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    • 2016-09-17
    • 2017-09-14
    • 2021-07-07
    • 2021-07-24
    • 1970-01-01
    相关资源
    最近更新 更多