将R中的多个非排他性虚拟变量汇总为一个变量

时间:2011-05-31 19:53:19

标签: r summary

我还收到了一个包含多个虚拟变量和其他变量的数据集。基本上我想做的是使用rms中的summary.formula创建汇总表。但是,我不知道如何从多个虚拟变量创建单个变量,它们不是互斥的。这是可能吗。当然我可以创建一个表等,但是我不能使用summary.formula,我喜欢summary.formula输出,只包括虚拟变量的各个级别。

编辑: 澄清:a& b需要进行总结,但它们不是相互排斥的。由于记录了每一行的年龄,我需要总结一下& b为一个变量,以便在summary.formula中使用。我编辑了下面的代码,以便0和1分别变为NA或a,b。

我希望summary.formula输出是这样的:

h<-data.frame(a=sample(c("A",NA),100,replace=T),b=sample(c("B",NA),100,replace=T),age=rnorm(100,50,25),epo=sample(c("Y","N"),100,T))





library(rms)

summary.formula(epo~age####+summary variable of a & b######,method="reverse",data=h)



#-----------------
 Descriptive Statistics by epo

+---------+--------------------------+--------------------------+
|         |N                         |Y                         |
|         |(N=56)                    |(N=44)                    |
+---------+--------------------------+--------------------------+
|age      |31.53434/48.90788/67.69096|28.63689/43.93502/57.81834|
+---------+--------------------------+--------------------------+
|sab : A  |         25% (14)         |         16% ( 7)         |
+---------+--------------------------+--------------------------+
|   B     |         27% (15)         |         32% (14)         |
+---------+--------------------------+--------------------------+

1 个答案:

答案 0 :(得分:2)

使用paste()似乎可以接受。

h$sab <- paste(h$a, h$b, sep="_")
summary.formula(epo~age+sab,method="reverse",data=h)
#-----------------
 Descriptive Statistics by epo

+---------+--------------------------+--------------------------+
|         |N                         |Y                         |
|         |(N=56)                    |(N=44)                    |
+---------+--------------------------+--------------------------+
|age      |31.53434/48.90788/67.69096|28.63689/43.93502/57.81834|
+---------+--------------------------+--------------------------+
|sab : 0_0|         25% (14)         |         16% ( 7)         |
+---------+--------------------------+--------------------------+
|    0_1  |         27% (15)         |         32% (14)         |
+---------+--------------------------+--------------------------+
|    1_0  |         25% (14)         |         34% (15)         |
+---------+--------------------------+--------------------------+
|    1_1  |         23% (13)         |         18% ( 8)         |
+---------+--------------------------+--------------------------+

另一种选择可能是interaction():

summary.formula(epo~age+interaction(a,b),method="reverse",data=h)

如果您希望将逻辑“OR”应用于变量组合,请使用:

h$a_or_b <- with(h, a|b)
summary.formula(epo ~ age+ h$a_or_b,method="reverse",data=h)