有没有一种方法可以粘贴两个“ftable”对象?

3

我正在使用survey中的svyby功能制作一些带加权比率的标准差和变异系数,我使用以下代码生成一个三维表格,其中提供了男性远程办公者Hombre_subocup/ocup,女性远程办公者Mujer_subocup/ocup以及非远程办公男性和女性的subocupocup之比。

tasasub_tele_sex319<-ftable(svyby(~subocup, by= ~ tele_sinco11 + SEX, subset(sd319, EDA >= 15 & POS_OCU != "Trabajadores sin pago"), denominator = ~ocup, deff= T, level = 0.9, vartype = c("cv", "se"), na.rm.by =  T,svyratio))

tasasub_tele_sex319

得到:

                        SEX_
tele_sinco11_             Hombre_subocup/ocup Mujer_subocup/ocup
  No teletrabaja_svyratio         0.084149460        0.080230723
  No teletrabaja_cv               0.001782653        0.002152965
  No teletrabaja_SE               0.021184369        0.026834665
  No teletrabaja_DEff             3.896438704        3.593164119
  Teletrabaja_svyratio            0.036515518        0.027384514
  Teletrabaja_cv                  0.003075113        0.002250647
  Teletrabaja_SE                  0.084213867        0.082186856
  Teletrabaja_DEff                2.325352651        2.039503624

但我也需要除了“性别”以外的比例总值,所以我使用这段代码并获得以下输出:

tasasub_tele_tot319<-ftable(svyby(~subocup, by= ~ tele_sinco11, subset(sd319, EDA >= 15 & POS_OCU != "Trabajadores sin pago"), denominator = ~ocup, deff= T, level = 0.9, vartype = c("cv", "se"), na.rm.by =  T,svyratio))

tasasub_tele_tot319

>tasasub_tele_tot319

                        subocup/ocup
tele_sinco11                         
No teletrabaja svyratio   0.082730583
               cv         0.001537011
               SE         0.018578512
               DEff       4.722529515
Teletrabaja    svyratio   0.031475714
               cv         0.001902234
               SE         0.060434971
               DEff       2.299934447

这将是没有任何分层的比率值(一个简单的双向表)。

我想要做的是将最后的输出粘贴到前面,这样我就可以在同一张表格中得到男性比率列、女性比率列和总比率列,更或者它应该看起来像这样:

enter image description here

如果“总计”列在第一位也无妨。


3
这似乎是一个有用的问题,可能会帮助很多人!你能否编辑一下,加入一个最小可重现的示例?也许可以从?svyratio?svyby中提取一些起始代码。 - Anthony Damico
抱歉,我一直在尝试制作一个简单的可重现示例,但在尝试制作ftable()时出现了这个错误:Error in tmp[ind] <- charQuote(lst[[i]]) : only 0's may be mixed with negative subscripts - esteban
也许可以使用 dput(tasasub_tele_tot319)dput(tasasub_tele_sex319) 创建一个最小可重现的示例。 - Anthony Damico
1个回答

0
解决方法是先组合,然后使用ftable。我们可以使用内置数据集来实现这一点:
> a<-svyby(~api.stu,denom=~enroll, ~stype+sch.wide, dclus1,svyratio)
> b<-svyby(~api.stu,denom=~enroll, ~stype, dclus1,svyratio)
> a
      stype sch.wide api.stu/enroll se.api.stu/enroll
E.No      E       No      0.8794583        0.01429043
H.No      H       No      0.8386232        0.01170588
M.No      M       No      0.8390440        0.01478048
E.Yes     E      Yes      0.8508618        0.01231925
H.Yes     H      Yes      0.8286597        0.01622480
M.Yes     M      Yes      0.8589915        0.01272169
> b
  stype api.stu/enroll se.api.stu/enroll
E     E      0.8532672        0.01253361
H     H      0.8300683        0.01472607
M     M      0.8536738        0.01114203

这些列名不同,但我们可以解决这个问题

>  b$sch.wide<-"Total"
> b
  stype api.stu/enroll se.api.stu/enroll sch.wide
E     E      0.8532672        0.01253361    Total
H     H      0.8300683        0.01472607    Total
M     M      0.8536738        0.01114203    Total

现在将它们组合起来

> ftable(rbind(a,b))
               sch.wide             No            Yes          Total
                        api.stu/enroll api.stu/enroll api.stu/enroll
stype                                                               
E     svyratio              0.87945833     0.85086183     0.85326723
      SE                    0.01429043     0.01231925     0.01253361
H     svyratio              0.83862316     0.82865975     0.83006825
      SE                    0.01170588     0.01622480     0.01472607
M     svyratio              0.83904396     0.85899149     0.85367375
      SE                    0.01478048     0.01272169     0.01114203

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接