You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 01:30:17