mutate函数为表(huxtable)中的数字列生成意外结果,但不在数据框中生成

问题描述 投票:1回答:1

我正在尝试学习如何使用包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)            

r dplyr mutate
1个回答
0
投票

关于使用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链的开头。

© www.soinside.com 2019 - 2024. All rights reserved.