如何解决如何在 flextable 输出中打印数字符号以及其他要求?
上下文: Flextable 包(0.6.6 版)使用两种类型的函数来格式化带有数字的列(双精度):colformat_double()
和 set_formatter_type()
。第一个具有控制小数和大标记的参数。后者具有 fmt_double
使用的 sprintf
参数(请参阅 ?set_formatter_type
)来格式化双列。
预期输出:我正在尝试使用以下规则格式化数字列:
预期的输出是一个 flextable 格式的数字,例如 + 1 026,56
。
想法:
您可以使用 sprintf
在数字前显示 +
和 -
符号:
> sprintf("%+1.2f",1.056)
[1] "+1.06"
但我不知道如何告诉 sprintf
使用逗号和空格作为小数和大标记,并且它无法在 flextable 输出中显示 +
。
问题:如何在 flextable 中格式化数字,使用加号或减号,空格作为大号,逗号作为小数点,同时保留指定数字的可能性?
library(flextable)
library(dplyr)
# flextable default number formatting
head(rock) %>%
flextable()
# changing big and decimal separator and digits
head(rock) %>%
flextable() %>%
# here I use colormat_num because area column is intenger
colformat_num(big.mark = " ",decimal.mark = ",",digits = 2) %>%
colformat_double(big.mark = " ",digits = 2)
# displaying "+" in front of numbers does not work
head(rock) %>%
flextable() %>%
set_formatter_type(
fmt_double = "%+1.2f",fmt_integer = "%+1.2f"
)
# while
sprintf("%+1.2f",1.50) # works
#> [1] "+1.50"
注意:sprintf
可能允许显示“+”号,但我不知道如何设置大分隔符和小数分隔符...
可能的技巧
可以在进入 flextable 函数之前预先格式化数字。但是,它们不被 flextable 视为“数字”,即 colformat_double()
不能使用。
head(rock) %>%
mutate(peri = -peri) %>%
mutate(across(where(is.numeric),function(x) ifelse(x > 0,paste0("+",format(x,big.mark = " ",digits = 2)),digits = 2)))) %>%
flextable() %>%
align(align = "right",part = "all")
由 reprex package (v2.0.0) 于 2021 年 7 月 2 日创建
解决方法
您可以使用 prefix
和 colformat_num
的 colformat_double
参数。
library(flextable)
head(rock) %>%
flextable(cwidth = 0.9) %>%
colformat_num(big.mark = " ",decimal.mark = ",",digits = 2,prefix = '+ ') %>%
colformat_double(big.mark = " ",prefix = '+ ')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。