【问题标题】:Automatic rounding in dplyr::summarise() function [duplicate]dplyr::summarise() 函数中的自动舍入[重复]
【发布时间】:2019-11-21 02:08:17
【问题描述】:

我想知道是否有任何简单的方法可以指定summarisedplyr 中报告的位数,最好使用本机dplyr 或其他tidyverse 函数?

这里有一些玩具数据

library(dplyr)

df <- data.frame(group = rep(letters[1:2], each = 10, length.out = 40),
                 large = rnorm(40, 100, 15),
                 small = rnorm(40, 0.5, 0.02))

如果我们再通过

进行总结
df %>% group_by(group) %>% summarise(mL = mean(large), mS = mean(small)) 

我们得到

#   group    mL    mS
#   <fct> <dbl> <dbl>
# 1 a     104.  0.496
# 2 b      97.6 0.506

请注意,在未指定任何舍入的情况下,平均值较高的变量已舍入到小数点后 1 位,平均值较小的变量已舍入到 3。

现在,如果我们希望将具有较大均值的变量也报告到小数点后 3 位?如果我们包含一个像这样舍入的命令

df %>% group_by(group) %>% summarise(mL = round(mean(large),3), mS = mean(small))

输出没有变化

#   group    mL    mS
#   <fct> <dbl> <dbl>
# 1 a     104.  0.496
# 2 b      97.6 0.506

只有使用format()函数才能得到我们想要的东西

df %>% group_by(group) %>% summarise(mL = format(round(mean(large),3),3), mS = mean(small))

  group      mL    mS
  <fct> <chr>   <dbl>
1 a     103.888 0.496
2 b     97.626  0.506

有更简单的方法吗?最好使用某种 tidyverse 函数。

【问题讨论】:

    标签: r dplyr rounding


    【解决方案1】:

    这与小标题的打印方式有关。数据框中的实际数字仍然具有所有小数位,它们只是在打印 tibble 时不显示。

    您可以使用as.data.frameprint.data.frame(),这将显示更多小数点(取决于您的getOption("digits"))。您也可以更改 tibble 设置,但我的理解是这些始终基于有效数字而不是小数点(因此您的值 >100 的小数点将少于值 https://tibble.tidyverse.org/reference/formatting.html 用于 tibble 打印选项

    所以

    df %>% group_by(group) %>% summarise(mL = round(mean(large),3), mS = round(mean(small),3)) %>%
         as.data.frame()
    

    将为您提供小数点后 3 位的值,并且

    df %>% group_by(group) %>% summarise(mL = mean(large), mS = mean(small))  %>%
         as.data.frame()
    

    将显示到getOption("digits") 小数位(我认为 7 是默认值)。

    另请注意,如果您确实想对摘要中的多个列执行相同的操作,summarise_at() 可能会很有帮助,例如

    df %>% group_by(group) %>% summarise_at(c("large","small"), ~round(mean(.),3)) %>% 
        print.data.frame()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-30
      • 1970-01-01
      • 2016-08-07
      • 1970-01-01
      • 2020-11-04
      • 1970-01-01
      • 1970-01-01
      • 2016-06-04
      相关资源
      最近更新 更多