打印时四舍五入 dplyr tbl_df 中的数值

标签 r dplyr

我试图将真实值保留在 dplyr 表 (tbl_df) 中,但显示四舍五入的版本。我觉得必须有一个打印方法参数来做到这一点。

这是我想要的一个例子:

my_tbl <- iris %>% group_by(Species) %>% summarise_each(funs((sum(.*12345e20))))

取而代之的是:
print(my_tbl)
Source: local data frame [3 x 5]

     Species Sepal.Length  Sepal.Width Petal.Length  Petal.Width
      (fctr)        (dbl)        (dbl)        (dbl)        (dbl)
1     setosa 3.089954e+26 2.115933e+26 9.024195e+25 1.518435e+25
2 versicolor 3.663996e+26 1.709783e+26 2.629485e+26 8.184735e+25
3  virginica 4.066443e+26 1.835702e+26 3.426972e+26 1.250549e+26

我想要类似的东西
print(my_tbl, signif=3)
Source: local data frame [3 x 5]

     Species Sepal.Length Sepal.Width Petal.Length Petal.Width
      (fctr)        (dbl)       (dbl)        (dbl)       (dbl)
1     setosa     3.09e+26    2.12e+26     9.02e+25    1.52e+25
2 versicolor     3.66e+26    1.71e+26     2.63e+26    8.18e+25
3  virginica     4.07e+26    1.84e+26     3.43e+26    1.25e+26

最佳答案

您可以重写 dplyr:::print.tbl_df 以包含 signif 参数。

print.tbl_df <- function (x, ..., signif = 3, n = NULL, width = NULL) 
{
    nums <- vapply(x, is.numeric, NA)
    x[nums] <- lapply(x[nums], signif, digits = signif)
    cat("Source: local data frame ", dim_desc(x), "\n", sep = "")
    cat("\n")
    print(trunc_mat(x, n = n, width = width))
    invisible(x)
}

my_tbl <- iris %>% group_by(Species) %>% summarise_each(funs((sum(.*12345e20))))

现在任何 tbl_df 都以默认有效数字 3 打印。
my_tbl
# Source: local data frame [3 x 5]
#
#      Species Sepal.Length Sepal.Width Petal.Length Petal.Width
#       (fctr)        (dbl)       (dbl)        (dbl)       (dbl)
# 1     setosa     3.09e+26    2.12e+26     9.02e+25    1.52e+25
# 2 versicolor     3.66e+26    1.71e+26     2.63e+26    8.18e+25
# 3  virginica     4.07e+26    1.84e+26     3.43e+26    1.25e+26

要使用其他有效数字打印,我们可以使用 print()
print(my_tbl, signif = 5)
# Source: local data frame [3 x 5]
#
#      Species Sepal.Length Sepal.Width Petal.Length Petal.Width
#       (fctr)        (dbl)       (dbl)        (dbl)       (dbl)
# 1     setosa   3.0900e+26  2.1159e+26   9.0242e+25  1.5184e+25
# 2 versicolor   3.6640e+26  1.7098e+26   2.6295e+26  8.1847e+25
# 3  virginica   4.0664e+26  1.8357e+26   3.4270e+26  1.2505e+26

关于打印时四舍五入 dplyr tbl_df 中的数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34246552/

相关文章:

r - 在 r 的 S 形曲线上找到一个点

r - 将 tibble/dataframe 转换为带有数组的嵌套 JSON

r - R 中的 min() 返回 NA 而不是 Inf

r - 将 MASS::fitdistr 按一个因子应用于多个数据

r - 在 R 包中定义自定义 dplyr 方法

r - dplyr - 间隔的条件扩展

r - 垃圾收集器会在tryCatch语句的替代表达式中释放变量吗?

r - 为 Linux 安装 R 包时出错

r - 通过字符串匹配从其他数据框中查找特定值

r - 在函数内的 dplyr 中的列中存储和调用变量