我正在尝试学习如何使用包huxtable
生成漂亮的表。这是一个学习曲线,但到目前为止我印象非常深刻。但是,我遇到了一些我似乎无法解决的问题。
首先,我试图格式化数字,以便有数千个位置的逗号分隔符(使用mutate_at
包中的dplyr
函数和prettyNum
。它的效果很好,除了对于具有类数字的列,内部零被删除(例如, 1001变为1,1而不是所需的1,001。如果col类是整数,则产生所需的输出。此外,如果输入数据是数据帧而不是huxtable,则产生正确的输出,无论列是否是数字或整数。
其次,当我添加其他表格式(特别是标题)时,当我将表格写入Word文件时,标题似乎不会被继承。此外,还会生成一条说明:
Note: zip::zip() is deprecated, please use zip::zipr() instead
下面是一些我认为说明问题的示例代码。
我的问题是:
1)为什么mutate函数在huxtables中为数字列产生奇数结果,但在数据帧中不产生奇数结果,我如何确保它确实起作用?当然,在将数据帧转换为表之前,我可以进行数字格式化,但我仍然想知道这里发生了什么。
2)为什么表格格式没有保留在输出文件中?
3)关于使用zipr
的注意事项是什么意思,并且它的引用是否也可能导致导出表属性失败?
谢谢,格伦
library(dplyr)
library(flextable)
library(huxtable)
test=data.frame(var1=1918:1925,var2=c(9009,1000:1006),var3 = 1100:1107)
str(test)
HUX <- hux(test)
number_format(HUX)
number_format(HUX[,2]) <- 0
# works as expected on data frame
mutate_at(test,-1,.funs=list(~prettyNum(.,big.mark=",")))
# does not work as expected on huxtable, for var2 of class numeric
mutate_at(HUX,-1,.funs=list(~prettyNum(., big.mark=",")))
# add caption, borders, and colnames
set_caption(HUX,"Example table") %>%
set_caption_pos("topleft") %>%
set_top_border(1,,1) %>%
set_bottom_border(final(1), , 1) %>%
add_colnames()
# write out the table (this produces a note about zipr)
quick_docx(HUX)
关于使用zipr的说明:请参阅https://github.com/awalker89/openxlsx/issues/454
Re mutate_at
:您的数据正在被正确转换,但是huxtable正在错误地显示它。它将逗号之前和之后的每个数字识别为单独的。 (数字识别很难,我们去购物......)我建议使用number_format
而不是直接转换数据:
number_format(HUX)[,2:3] <- list(function(x) prettyNum(x, big.mark=","))
最后,你的第二个问题有一个简单的解决方案:你正在改变HUX
的所有功能,但你没有将结果保存回原始变量。请记住,R是一种函数式语言,对象很少被修改。将HUX <-
添加到dplyr链的开头。