我正在使用 dplyr 在 R 中制作一个表格。我想四舍五入到第十位,所以 1.0 或 2.3。我正在使用以下代码
mutate_if(is.numeric, round, 1)
此类作品;大多数舍入看起来都很棒,除了当它应该舍入并放置零时,例如 1.0 它只显示 1 我应该怎么做才能解决这个问题?
大概问题更多的是关于表格表示,而不是关于舍入值的存储,这些通常是独立的概念。如果您想控制输出表中值的格式(即使用
kable
/ kableExtra
、gt
、formattable
...或者只是 tibble
输出),它是格式化而不是(只是)您可能感兴趣。
这是格式化
tibble
列的示例;另请注意显示数据存储方式的最后一个表达式(1
、1.2501
,而不是 1.0
、1.3
),这意味着如果您在计算中确实需要舍入值,则仍应舍入:
library(dplyr, warn.conflicts = FALSE)
df <- tibble(n = c(1.0,1.2,1.2501,1234),
l = LETTERS[1:4])
# tibble::num -- format a numeric vector
df_rounded <- mutate(df, across(where(is.numeric), \(x) tibble::num(x, digits = 1)))
# how it prints:
df_rounded
#> # A tibble: 4 × 2
#> n l
#> <num:.1!> <chr>
#> 1 1.0 A
#> 2 1.2 B
#> 3 1.3 C
#> 4 1234.0 D
# how formatted numeric column is represented:
dput(df_rounded$n)
#> structure(c(1, 1.2, 1.2501, 1234), pillar = structure(list(sigfig = NULL,
#> digits = 1, label = NULL, scale = NULL, notation = NULL,
#> fixed_exponent = NULL, extra_sigfig = NULL), class = c("pillar_num_attr",
#> "pillar_vctr_attr", "tibble_vec_attr")), class = c("pillar_num",
#> "pillar_vctr", "vctrs_vctr", "double"))
创建于 2023-09-24,使用 reprex v2.0.2