为变量设置标签导致{gtsummary}统计表格百分比显示NA的求助
解决{gtsummary}设置分类变量水平后百分比显示NA的问题
问题出在你修改因子水平的方式上——直接用levels()修改已存在的因子,会导致survey设计对象无法正确识别因子的属性,进而让tbl_svysummary计算列百分比时返回NA。
两种可行的解决办法:
方法一:创建因子时直接指定标签
在把数值变量转换成因子的同时,就指定好水平对应的标签,替代事后修改levels的操作:
library(survey) library(gtsummary) library(cobalt) # 创建数据并添加含5个水平的分类变量hello: data <- lalonde hello <- sample(1:5, nrow(data), replace = TRUE) # 创建因子时直接指定水平和标签 data$hello <- factor(hello, levels = 1:5, labels = c("hello_1", "hello_2", "hello_3", "hello_4", "hello_5")) # 指定要纳入表格的变量: vars <- c("hello") # 创建表格1: datasvy <- survey::svydesign(~1, data = data, strata = ~treat) table1 <- tbl_svysummary( datasvy, by = treat, include = all_of(vars), statistic = list( all_categorical() ~ "{n}({p}%)" ), percent = "col", digits = list( all_categorical() ~ c(0, 1) ) ) table1 <- as.data.frame(table1)
方法二:用forcats包修改因子水平
如果已经创建了因子,推荐用forcats::fct_recode()来修改水平名称,它会正确更新因子的元数据:
library(survey) library(gtsummary) library(cobalt) library(forcats) # 创建数据并添加含5个水平的分类变量hello: data <- lalonde hello <- sample(1:5, nrow(data), replace = TRUE) data$hello <- as.factor(hello) # 用fct_recode修改水平标签 data$hello <- fct_recode(data$hello, "hello_1" = "1", "hello_2" = "2", "hello_3" = "3", "hello_4" = "4", "hello_5" = "5" ) # 后续代码不变...
两种方法都能让tbl_svysummary正常计算分组列百分比,不会出现NA。
内容的提问来源于stack exchange,提问作者geek45
相关产品推荐
相关产品推荐

