首页 > 解决方案 > 使用正则表达式将 `.0` 添加到不带小数的数字末尾

问题描述

我正在尝试使用正则表达式将“.0”添加到还没有小数的数字的末尾。

对于一个简单的可重现示例:

library(tidyverse)
library(stargazer)

mtcars %>% 
  head(3) %>% 
  select(mpg, hp) %>% 
  stargazer(summary = FALSE, digits = 1, type = "text")

给出如下所示的输出:

#> 
#> ======================
#>               mpg  hp 
#> ----------------------
#> Mazda RX4      21  110
#> Mazda RX4 Wag  21  110
#> Datsun 710   22.8   93 
#> ----------------------

我想添加".0"所有没有小数位的数字。所以我想要的输出将是这个html版本:

#> ======================
#>               mpg  hp 
#> ----------------------
#> Mazda RX4     21.0  110.0
#> Mazda RX4 Wag 21.0  110.0
#> Datsun 710    22.8   93.0 
#> ----------------------

为了便于阅读,上表采用文本格式,但我真正的问题是 HTML,所以我正在查看如下问题:

library(tidyverse)
library(stargazer)

mtcars %>% 
  head(3) %>% 
  select(mpg, hp) %>% 
  stargazer(summary = FALSE, digits = 1, type = "html")


#> <table style="text-align:center"><tr><td colspan="3" style="border-bottom: 1px solid black"></td></tr><tr><td style="text-align:left"></td><td>mpg</td><td>hp</td></tr>
#> <tr><td colspan="3" style="border-bottom: 1px solid black"></td></tr><tr><td style="text-align:left">Mazda RX4</td><td>21</td><td>110</td></tr>
#> <tr><td style="text-align:left">Mazda RX4 Wag</td><td>21</td><td>110</td></tr>
#> <tr><td style="text-align:left">Datsun 710</td><td>22.8</td><td>93</td></tr>
#> <tr><td colspan="3" style="border-bottom: 1px solid black"></td></tr></table>

gsub任何人都可以帮助stringr解决这个问题吗?

This previous question has answers for the latex solution,但我追求的是 HTML 解决方案。

标签: rstargazer

解决方案


我们可以用sprintf

library(dplyr)
library(stargazer)
mtcars %>% 
  head(3) %>% 
  select(mpg, hp) %>%
  mutate(across(everything(), sprintf, fmt = '%0.1f')) %>%
  stargazer(summary = FALSE, digits = 1, type = 'text')

-输出

#============
#  mpg   hp  
#------------
#1 21.0 110.0
#2 21.0 110.0
#3 22.8 93.0 
#------------

推荐阅读