如何在不使用列名的情况下在 flextable 对象中指定大标记分隔符?
How to specify big marks separator in flextable object without using column names?
上下文: 我正在使用 awesome 包 flextable
创建 .docx table。此包具有在最终输出中格式化数字的功能:set_formatter_type()
。这个函数,如果我没理解错的话,需要一个可以被sprintf()
使用的字符输入。我能够使用 set_formatter()
实现预期的输出,但它需要明确命名每一列,而我不能用我的真实 table.
问题: 我找不到如何使用与 flextable::set_formatter_type()
一起使用的 sprintf()
语法来添加大标记(例如千位分隔符)。
可以使用 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, digits = 0, big.mark = " ")) # does not work (error)
flextable::set_formatter(df, Sepal.Length = function(x) formatC(x, digits = 0, big.mark = " ", format = "f")) # works but I would like not to have to name each column from my real life dataframe...
预期输出:
flextable::set_formatter(df,
Sepal.Length = function(x) formatC(x, digits = 0, big.mark = " ", format = "f"),
Sepal.Width = function(x) formatC(x, digits = 0, big.mark = " ", format = "f"),
Petal.Lenght = function(x) formatC(x, digits = 0, big.mark = " ", format = "f"))
感谢@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)
输出:
制作人员:
上下文: 我正在使用 awesome 包 flextable
创建 .docx table。此包具有在最终输出中格式化数字的功能:set_formatter_type()
。这个函数,如果我没理解错的话,需要一个可以被sprintf()
使用的字符输入。我能够使用 set_formatter()
实现预期的输出,但它需要明确命名每一列,而我不能用我的真实 table.
问题: 我找不到如何使用与 flextable::set_formatter_type()
一起使用的 sprintf()
语法来添加大标记(例如千位分隔符)。
可以使用 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, digits = 0, big.mark = " ")) # does not work (error)
flextable::set_formatter(df, Sepal.Length = function(x) formatC(x, digits = 0, big.mark = " ", format = "f")) # works but I would like not to have to name each column from my real life dataframe...
预期输出:
flextable::set_formatter(df,
Sepal.Length = function(x) formatC(x, digits = 0, big.mark = " ", format = "f"),
Sepal.Width = function(x) formatC(x, digits = 0, big.mark = " ", format = "f"),
Petal.Lenght = function(x) formatC(x, digits = 0, big.mark = " ", format = "f"))
感谢@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)
输出:
制作人员: