【问题标题】:Building a table/dataframe/something exportable from Desc function output in R从 R 中的 Desc 函数输出构建表/数据框/可导出的内容
【发布时间】:2018-09-26 17:05:57
【问题描述】:

我绝对是个菜鸟,尽管我多年来一直使用 R 完成各种小任务。

对于我的生活,我无法弄清楚如何将“Desc”函数的结果转化为我可以使用的东西。当我保存 x

显然我对 R 数据结构有一个严重的误解,但我一直在寻找过去 90 分钟但无济于事,所以我想我会伸出援手。

简而言之,我只想提取从多个数据集的 Desc 结果提供的描述性统计数据的某些方面(N、均值、UB、LB、中位数),然后构建一个我可以使用的小表格。

感谢您的帮助。

【问题讨论】:

    标签: r desctools


    【解决方案1】:

    假设您有一个数据框,x,其中:

    x <- data.frame(i=c(1,2,3),j=c(4,5,6))
    

    你可以设置:

    desc.x <- Desc(x)
    

    并访问任何给定列上的信息,例如:

    desc.x$i
    desc.x$i$mead
    desc.x$j$sd
    

    以及 Desc 提供的任何其他统计信息。 $ 是这里的关键,它是您访问 Desc 返回的 list 的命名字段的方式。

    编辑:如果您传递单个列(如提问者所做的那样),或者只是将向量传递给Desc,那么您将返回一个 1 项列表。相同的原则适用,但通常的语法不同。现在你可以使用:

    desc.x <- Desc(df$my.col)
    desc.x[[1]]$mean
    

    将来,解决这个问题的方法是查看 RStudio 中的环境窗口并尝试弄清楚如何访问这些字段,检查 github 或其他地方的源代码,或者(最佳首选)使用str(desc.x),这给了我们:

    > str(desc.x)
    List of 1
     $ :List of 25
      ..$ xname     : chr "data.frame(i = c(1, 2, 3), j = c(4, 5, 6))$i"
      ..$ label     : NULL
      ..$ class     : chr "numeric"
      ..$ classlabel: chr "numeric"
      ..$ length    : int 3
      ..$ n         : int 3
      ..$ NAs       : int 0
      ..$ main      : chr "data.frame(i = c(1, 2, 3), j = c(4, 5, 6))$i (numeric)"
      ..$ unique    : int 3
      ..$ 0s        : int 0
      ..$ mean      : num 2
      ..$ meanSE    : num 0.577
      ..$ quant     : Named num [1:9] 1 1.1 1.2 1.5 2 2.5 2.8 2.9 3
      .. ..- attr(*, "names")= chr [1:9] "min" ".05" ".10" ".25" ...
      ..$ range     : num 2
      ..$ sd        : num 1
      ..$ vcoef     : num 0.5
      ..$ mad       : num 1.48
      ..$ IQR       : num 1
      ..$ skew      : num 0
      ..$ kurt      : num -2.33
      ..$ small     :'data.frame':  3 obs. of  2 variables:
      .. ..$ val : num [1:3] 1 2 3
      .. ..$ freq: num [1:3] 1 1 1
      ..$ large     :'data.frame':  3 obs. of  2 variables:
      .. ..$ val : num [1:3] 3 2 1
      .. ..$ freq: num [1:3] 1 1 1
      ..$ freq      :Classes ‘Freq’ and 'data.frame':   3 obs. of  5 variables:
      .. ..$ level  : Factor w/ 3 levels "1","2","3": 1 2 3
      .. ..$ freq   : int [1:3] 1 1 1
      .. ..$ perc   : num [1:3] 0.333 0.333 0.333
      .. ..$ cumfreq: int [1:3] 1 2 3
      .. ..$ cumperc: num [1:3] 0.333 0.667 1
      ..$ maxrows   : num 12
      ..$ x         : num [1:3] 1 2 3
     - attr(*, "class")= chr "Desc"
    

    "List of 1" 表示您通过desc.x[[1]] 访问它,下面是$s。当您看到 num[1:3] 之类的内容时,这意味着它是 atomic vector,因此您可以访问第一个成员,例如 var$field$numbers[1]

    【讨论】:

    • 您好,非常感谢您的回复。我应该指定我只在我的 df 的一列上调用 Desc(x)。它给了我多行汇总统计信息。当我设置 desc.x
    • 同样的原则适用于单个列,在这种情况下,您可以这样做:desc.x[[1]]$lengthdesc.x[[1]]$mean
    • 哦,太好了,谢谢。最后一个问题 - 当我做 desc.x$median 等时,一些回报,例如 MeanCI 和 Median 不是选项。还有其他提示吗?你摇滚再次感谢
    • 这个库显然非常适合学习 R 数据结构访问模式。你可以通过这个得到中位数:desc.x[[1]]$quant['median']。不知何故,平均 CI 被从结果中截断,似乎是一个错误?计算起来很容易:qt(p=0.025, df=desc.x[[1]]$n - 1) * desc.x[[1]]$meanSE 95% CI。
    • 没有什么可以添加到 Josh 的 cmets 中。此外,嗯,我不会直接将“结果对象中缺少的 MeanCI”称为错误。由于历史原因,它是在打印例程 print.Desc.numeric 中计算的。但我承认它违反了将计算集中在一个地方的规则。我会考虑更改它并直接在结果对象中报告 MeanCI。
    猜你喜欢
    • 1970-01-01
    • 2020-12-30
    • 2016-01-08
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多