2016-11-11 56 views
0

我有一個數據集,主要包含分類變量(因子),我試圖格式化。 數據集當前格式是這樣的:爲相同級別的不同因素創建虛擬變量

Obs X1 X2 X3 X4 ... X50 
    1 A B C D 
    2 B A D E 
    3 B C D A 

然而,一種用於X1和X2應該是指相同的,即,X1和X2可以被認爲是什麼因素首次發現的。我的想法是使用假人來制定數據集;

Obs A B C D ... 
    1 1 1 1 1 ... 
    2 1 1 0 1 ... 
    3 1 1 1 1 ... 

我一個解決方案,嘗試過:我已經分居了所有的分類變量進入data.frame DF,然後嘗試爲所有的因素,每個級別創建虛擬變量。

for (i in 1:ncol(df)){ 
     for(level in df[,i]){ 
      df2[paste("", level, sep="")] = ifelse(i == level, 1, 0) 
     } 
    } 

然而,當我嘗試運行此編碼R似乎停止了 - 是有爲什麼這不應該工作的任何原因? 有沒有人有任何建議,以更有效的方式來處理這個問題?

感謝您的任何建議

回答

0

如果你想快速創建虛擬變量,使用Matrix庫中創建一個稀疏矩陣。您需要將分類變量轉化爲因素,如果他們尚未使用data$X1<-as.factor(data$X1)

library(Matrix) 
f <- as.formula(DependedntVar~ + X1 
        + X2 
        + X3..etc) 

    # transform dataframe to spareMatrix 
    x <- model.matrix(f, data) 
    y <- as.matrix(DependedntVar, ncol=1) 

現在你可以使用你的稀疏矩陣的x,y是包含因變量和X一列矩陣模型Y是稀疏矩陣中的因素已被轉換成dummay變量。

此外,您還需要注意X1和X2之間的自相關,因爲它會從您所說的100%相關性中看出來