我正在使用 dplyr 制作表格,我想要四舍五入

问题描述 投票:0回答:1

我正在使用 dplyr 在 R 中制作一个表格。我想四舍五入到第十位,所以 1.0 或 2.3。我正在使用以下代码

mutate_if(is.numeric, round, 1) 

此类作品;大多数舍入看起来都很棒,除了当它应该舍入并放置零时,例如 1.0 它只显示 1 我应该怎么做才能解决这个问题?

r dplyr rounding mutate
1个回答
0
投票

大概问题更多的是关于表格表示,而不是关于舍入值的存储,这些通常是独立的概念。如果您想控制输出表中值的格式(即使用

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

© www.soinside.com 2019 - 2024. All rights reserved.