2011-05-31 69 views
1

我還發送了一個包含多個虛擬變量和其他變量的數據集。基本上我想要做的是用rms創建summary.formula彙總表。但是,我不知道如何從多個虛擬變量創建單個變量,而且它們不是互斥的。這是可能嗎。當然,我可以創建一個表格等,但是我不能使用summary.formula,而且我喜歡summary.formula輸出以僅包含虛擬變量的各個級別。將R中的多個非排他性虛擬變量彙總到一個變量中

編輯: 澄清: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

有很多將二元變量組合成單個變量的方法,但是如何做到這一點取決於它們的含義以及你希望單個變量表示什麼,如果你提供了一些關於你想要單變量意味着什麼的更多細節, ight能夠提供幫助。 – joran 2011-05-31 20:10:01

回答

2

使用膏()似乎可以接受的工作。

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)   | 
+---------+--------------------------+--------------------------+ 

另一種選擇可能是相互作用():

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

相反,如果你想有一個邏輯「或」應用到變量的組合,然後使用:

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

問題在於sab變量應該只包含a或b-而不是a_and_b,a_and_a或b_and_b ..我只想通過a或b進行總結 - 它們並不是相互排斥的。 – Misha 2011-05-31 20:39:58

+0

我確信Dwin可以更新這個答案來解決這個問題,但一種方法是創建一個新變量h $ c < - (h $ a + h $ b)== 1. – joran 2011-05-31 20:53:09

+0

@Misha:您需要澄清你想要的。您對邏輯術語「或」和「和」的使用看起來很混亂。我無法用「a_and_a」或「b_and_b」創建任何變量級別。所創建的四個等級是a = 0和b = 0,a = 0%b = 1,a = 1和b = 0,以及a = 1和b = 1。你只想要最大(a,b)? – 2011-05-31 20:57:22