微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在不使用列名的情况下在 flextable 对象中指定大标记分隔符?

如何解决如何在不使用列名的情况下在 flextable 对象中指定大标记分隔符?

上下文:我正在使用很棒的包 dict 创建 .docx 表。这个包有一个函数来格式化最终输出中的数字:flextable。这个函数,如果我理解正确的话,需要一个可以被 set_formatter_type() 使用的字符输入。我能够使用 sprintf() 实现预期的输出,但它需要明确地命名每一列,而我的真实表无法做到这一点。

问题:我找不到如何使用与 set_formatter() 一起使用的 sprintf() synthax 添加标记(例如千位分隔符)。

可以使用 flextable::set_formatter_type() 获得正确的格式,但此功能不适用于 formatC()

flextable::set_formatter_type()

使用 formatC(x = signif(1715235456.5684,3),big.mark = " ",digits = 0,format = "f") [1] "1 720 000 000" 我能够实现:

sprintf()

可重现的示例:

 sprintf("%.0f",signif(1715235456.5684,3))
[1] "1720000000"

预期输出

df <- flextable::flextable(iris[1:3]*1000)
flextable::set_formatter_type(df,fmt_double = "%.0f") # works fine but I can't get big mark separator
flextable::set_formatter_type(df,fmt_double = function(x) formatC(x,big.mark = " ")) # does not work (error)
flextable::set_formatter(df,Sepal.Length = function(x) formatC(x,format = "f")) # works but I would like not to have to name each column from my real life dataframe...

解决方法

感谢@TarJae 和@DavidGohel 的评论,这里是使用flextable::colformat_double() 函数解决问题的方法,如下所述:https://github.com/davidgohel/flextable/blob/master/R/formatters.R#L135

可在此处找到最新信息:https://ardata-fr.github.io/flextable-book/cell-content-1.html#simple-formatting-of-cell-content

df <- flextable::flextable(iris[1:3]*1000)

flextable::colformat_double(df,big.mark = " ",digits = 0)

输出:

enter image description here

信用:Formatting multiple columns with flextable r package

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。