2015-11-02 18 views
2

說明 我有2個分類變量,我想將它們變成列 - 爲每個類別一列如何強制model.matrix使用2個分類變量的所有級別?

進展 簡單的代碼來實現這一目標:

d.data <- data.frame(a=as.factor(c("some1","some2","some3")), b = as.factor(c("other1","other3","other2"))) 
d.data.new <- data.frame(model.matrix(~a -1 + b -1, data=d.data)) 
names(d.data.new) 

[ 1]「asome1」「asome2」「asome3」「bother2」「bother3」

「-1」僅適用於由整個3級表示的「a」變量,但「b」只有兩個 - 我需要整數3. 不是真正的未知在這種情況下,「-1」 }內model.matrix

回答

1

不是model.matrix的解決方案,但可以使用mtabulate

library(qdapTools) 
mtabulate(as.data.frame(t(d.data))) 

得到二進制輸出或另一選擇是將循環通過的「d列名。數據「,並在每列上單獨執行model.matrixcbind並更改列名稱(如果需要)。

d1 <- do.call(cbind,lapply(names(d.data), function(i) 
         model.matrix(~get(i)-1, d.data))) 
colnames(d1) <- sub('.*\\)', '', colnames(d1)) 
相關問題