2016-06-07 25 views
0

我準備好以下數據框來運行邏輯迴歸,將「總計」和「是」計數轉換爲二進制,其中yes = yes和no =總沒錯。這是原件:從R中的年度頻率創建長整型表

year<-1999:2012 
total<-c(4372, 6448, 6141, 5630, 6588, 7878, 7768, 7352, 6333, 5168, 4569, 4152, 3540, 1412) 
yes<-c(400, 580, 609, 567, 606, 843, 853, 839, 825, 607, 510, 459, 476, 209) 
mdr<-data.frame(year, total, yes) 

我想要一個longform表設置二進制yes/no與year作爲線性變量;即兩列:數據$年,重複的「總」時間,以及數據$ mdr,這是'Y'每年重複'是'時間和'N'重複總計 - 是在給定年份中發生的是。憑直覺,我知道的語法是可怕的位置:

newdf<- 

for 1:i in mdr 

newdf$year<-rep(year, 'total' times) 
newdf$mdr<-rep(c('Y','N') times = c(yes, total-yes) 

預期輸出:

Year MDR 
1999  Y 
1999  Y 
1999  Y 
1999  Y 

但隨着400個Y和4372-400 N爲1999年,580個Y和6448-580 N爲2000年,等

有人可以幫我把它變成一個工作循環或sapply或類似?

謝謝!

+0

你能顯示預期的輸出嗎 – akrun

+0

你不需要*做邏輯迴歸。請參閱'?glm'的細節中'權重'的描述。如果你定義'mdr $ prop = mdr $ yes/mdr $ total',你可以做'glm(prop〜year,family = binomial,weights = total,data = mdf)'。 – Gregor

+0

@格雷戈爾,謝謝!爲我節省了大量的工作......必須迭代約30次以上的迴歸。 – jlev514

回答

1

我覺得這應該產生這樣的data.frame:

repVec <- c(t(cbind(mdr$yes, mdr$total-mdr$yes))) 
df <- with(mdr, data.frame("year"=rep(year, total), 
          "mdr"=rep(rep(c("y", "n"), nrow(mdr)), repVec))) 

第一行創建具有肯定的適當數量而沒有的,每年的載體。

data.frame函數創建一個data.frame,使用rep重複正確的次數。 mdr變量由兩個rep函數構成,第一個函數按原始data.frame中的行數重複c(「y」,「n」)。然後將該向量饋送到第二個rep函數,該函數以repVec指示的次數重複該向量的每個元素。