在R函数中使用syvtable

zynd9foi  于 2023-05-11  发布在  其他
关注(0)|答案(1)|浏览(208)

我想创建一个函数,它在参数中接受x(字符变量),并将其作为公式的一部分放入svytable()函数中。

prop <- function(x){
  
  tab <- svytable(~x+group_treatment, dw)
  df <- as.data.frame(cprop(tab))
  df_bis <- reshape(df,idvar = "x",timevar = "group_treatment", direction = "wide")
  df_bis

}

prop("tranche_age")

当我运行这段代码时,我得到以下错误消息:“eval(predvars,data,env)出错:未找到对象'x'调用自:eval(predvars,data,env)"。
有什么办法解决这个问题吗?
谢啦
克洛伊

jjhzyzn0

jjhzyzn01#

可以使用reformulate根据传递给函数的列名动态创建formula。另外,你必须在reshape()中使用idvar = x而不是idvar = "x"
使用?svytable中的默认示例数据:

library(survey)
library(questionr)

data(api)

dw <- svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc)

prop <- function(x) {
  tab <- svytable(reformulate(c(x, "stype")), dw)
  df <- as.data.frame(cprop(tab))
  df_bis <- reshape(df, idvar = x, timevar = "stype", direction = "wide")
  df_bis
}

prop("sch.wide")
#>   sch.wide     Freq.E    Freq.H Freq.M  Freq.All
#> 1       No   8.333333  21.42857     32  12.56831
#> 2      Yes  91.666667  78.57143     68  87.43169
#> 3    Total 100.000000 100.00000    100 100.00000

相关问题