Tableone无法处理来自调查svydesign对象的因素

时间:2018-04-04 14:21:14

标签: r survey

我正在尝试使用tableone包生成一个表摘要,其中数据输入是使用调查包创建的调查设计对象。根据tableone文档,这应该是可能的,事实上,它适用于我同事的工作区。 Tableone能够处理连续变量但不能处理因子。以下是可重复的示例

library(survey, tableone)
age<- c(55,66,77,33,44)
gender<-c("Male","Male","Female","Male","Female")
weights<-c(2.3,1.0,3.0,2.3,1.0)

df<- data.frame(age,gender,weights)
svy <- svydesign(id = ~0, data = df, weights=~weights)
t1 <- svyCreateTableOne(data = svy, vars=c("age", "gender")) 

我收到错误消息:“Summary.factor中的错误(c(3L,1L),na.rm = TRUE):   'sum'对于因素没有意义“

无论我是将“性别”列保留为字符,还是在创建svy1之前将其更改为某个因素,这都会持续存在。

我在RStudio 1.1.442上运行R ver 3.4.4。

任何人都面临这个问题或有解决这个问题的建议?谢谢!

2 个答案:

答案 0 :(得分:1)

将变量“ weights”重命名为其他名称(例如“ ps_Weights”),它将运行。

library(survey)
library(tableone)
age<- c(55,66,77,33,44)
gender<-c("Male","Male","Female","Male","Female")
ps_weights<-c(2.3,1.0,3.0,2.3,1.0)

df<- data.frame(age,gender,ps_weights)
svy <- svydesign(id = ~0, data = df, weights=~ps_weights)
t1 <- svyCreateTableOne(data = svy, vars=c("age", "gender"))
print(t1)

                Overall      
n 9.60
age (mean (sd)) 56.60 (19.03)
gender = Male (%) 5.6 (58.3)

答案 1 :(得分:0)

如果从您提供给svyCreateTableOne的变量列表中删除分类变量,它就可以使用:

> t1 <- svyCreateTableOne(data = svy, vars=c("age", "weights")) 
> t1

                      Overall      
  n                    9.60        
  age (mean (sd))     56.60 (19.03)
  weights (mean (sd))  2.25 (0.79) 

根据我对tableone包的理解,您必须分别检查您的分类和定量变量。如果您想按性别进行拆分,请将其添加为strata

> t1 <- svyCreateTableOne(data = svy, vars=c("age", "weights"), strata=c("gender")) 
> t1
                     Stratified by gender
                      Female        Male          p      test
  n                    4.00          5.60                    
  age (mean (sd))     68.75 (20.21) 47.93 (15.99)  0.205     
  weights (mean (sd))  2.50 (1.22)   2.07 (0.61)   0.552