使用tbl_merge合并tbl_summary与tbl_svysummary时遇精度转换错误
问题:tbl_merge合并无权重tbl_summary与加权tbl_svysummary时出错
当尝试合并tbl_summary生成的无权重汇总表与tbl_svysummary生成的加权汇总表时(未使用by参数),触发以下类型转换错误:
Error in dplyr::rows_update(): ! Can't convert from y$modify_stat_N <double> to x$modify_stat_N <integer> due to loss of precision. • Locations: 1, 2
但使用by参数分组汇总时,合并操作可正常执行。
错误原因
tbl_summary生成的表中,modify_stat_N列存储实际观测数量,为整数类型tbl_svysummary生成的表中,modify_stat_N列是加权后的样本量,为浮点型(double)- 无
by参数时,tbl_merge内部通过dplyr::rows_update匹配该列,类型不兼容导致精度丢失报错;使用by参数时表结构不同,不会触发该类型校验。
解决方案
通过modify_table_body统一两个表中modify_stat_N列的类型即可解决问题,以下两种方法任选其一:
方法1:将加权表的modify_stat_N转为整数类型
# 修正加权表t4的列类型 t4_fixed <- t4 %>% modify_table_body( ~ .x %>% mutate(modify_stat_N = as.integer(modify_stat_N)) ) # 执行合并 tbl_merge(tbls = list(t3, t4_fixed))
方法2:将无权重表的modify_stat_N转为浮点类型
# 修正无权重表t3的列类型 t3_fixed <- t3 %>% modify_table_body( ~ .x %>% mutate(modify_stat_N = as.double(modify_stat_N)) ) # 执行合并 tbl_merge(tbls = list(t3_fixed, t4))
补充说明
gtsummary最终会将数值格式化为字符串展示,类型转换不会影响表格的最终呈现效果,仅用于通过合并时的类型校验。
内容的提问来源于stack exchange,提问作者Charly Marie
相关产品推荐
相关产品推荐

