【问题标题】:Add frequency and SD to a summary in R [duplicate]将频率和 SD 添加到 R 中的摘要中 [重复]
【发布时间】:2017-02-02 14:33:13
【问题描述】:

我有一个这样的data.frame(示例):

product   protein   fat   starch
  aaa        40      5      10
  bbb        50      6      8
  ccc        12      50     4

我想询问这些值的摘要(最小值、最大值、1stQ、3rdQ..)。 当我跑步时:

aggregate(protein~product,summary,data=DATA4, na.rm = TRUE)

我有这个……

    product protein.Min. protein.1st Qu. protein.Median protein.Mean protein.3rd Qu. protein.Max.
      aaa        6.400          14.700         15.600       15.540          16.600       22.500
      bbb        6.300           9.400         10.100       10.130          10.800       15.100
      ccc       23.000          24.080         24.250       24.180          24.420       25.000

但是我也想要频率和 SD。我怎么能这么问? 我尝试使用 ddply,但无法使其正常工作。 (我在某些变量(蛋白质、脂肪、淀粉...)中有 NA

除此之外,因为这里我只询问蛋白质水平的摘要,我如何一次询问我拥有的每个变量(蛋白质、脂肪、淀粉等)的摘要?

非常感谢!

【问题讨论】:

  • 类似aggregate(protein~product,FUN = function(i) c(summary(i, na.rm = TRUE), l1 = length(i), sd1 = sd(i, na.rm = TRUE)), data=DATA4)?
  • @Sotos 谢谢!除了我无法理解代码中的任何内容之外,它还在工作.. x) 但是知道为什么现在答案是这种格式的吗? aaa 6.400000e+00 1.470000e+01 1.560000e+01 1.554000e+01 1.660000e+01(指数?)
  • 您可以使用options(scipen=999)避免科学记数法
  • @Sotos 但是我应该把它放在哪里?在代码的哪一部分?对不起.. :/
  • 只是options(scipen = 999) ; aggregate(.......))))

标签: r frequency summary


【解决方案1】:

如果我想指定如何获得摘要的输出,我通常会使用dplyr 转向更精细的解决方案,如下所示:

library(dplyr)

df <- data.frame(product = rep(letters[1:3], each=3,3),
                 protein = sample(10:40, 27, replace=T))

df %>% group_by(product) %>% 
  summarise(min = min(protein)
            ,max = max(protein)
            ,mean = mean(protein)
            ,sd = sd(protein)
            ,n = n()
            ,q25 = quantile(protein, .25)
            ,q75 = quantile(protein, .75))  

结果:

# A tibble: 3 × 8
  product   min   max     mean       sd     n   q25   q75
   <fctr> <int> <int>    <dbl>    <dbl> <int> <dbl> <dbl>
1       a    16    39 24.66667 8.717798     9    17    30
2       b    24    40 31.55556 5.387743     9    26    35
3       c    13    38 26.66667 8.108637     9    22    31

【讨论】:

  • 您可以将其调整为summarise_all(funs(min, max, median, sd, n = n(), q25 = quantile(., .25), q75 = quantile(., .75))),您是否想将其应用于原始数据框中的所有类别(蛋白质、脂肪和淀粉)
  • @Wietze314 感谢您的帮助!在您的情况下,我可以看到它正在工作,但是当我运行该代码时,出现此错误: function_list[[i]](value) 中的错误:找不到函数“group_by”
  • 你想调用library(dplyr)那些函数来自那个包
  • @Wietze314 我知道并且我已经这样做了……当我再试一次时……同样的错误。
  • 你的包是最新的吗?也许你需要更新
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-18
  • 1970-01-01
  • 2021-12-02
  • 1970-01-01
  • 2013-09-24
相关资源
最近更新 更多