2016-06-22 43 views
0

我有一個像下面這樣的數據,我想將這個變量轉換成列,它應該等於變量中的no.of類。如何將多類變量轉換爲R中的多列?

數據:

variable 
1 red 
2 red 
3 black 
4 red 
5 black 
6 green 
7 black 
8 red 
9 green 

預期輸出:

variable red black green 
1 red  1  0  0 
2 red  1  0  0 
3 black  0  1  0 
4 red  1  0  0 
5 black  0  1  0 
6 green  0  0  1 
7 black  0  1  0 
8 red  1  0  0 
9 green  0  0  1 

嘗試:

data$red = ifelse(data$variable == "red",1,0) 
data$black = ifelse(data$variable == "black",1,0) 
data$green = ifelse(data$variable == "green",1,0) 

通過使用上面的代碼中,我取得了我想要的東西。但是如果我在一個變量中有超過10個類,我不想編寫10次代碼。那麼,有沒有什麼最好的辦法可以一氣呵成呢。

+0

請問您可以使用'dput'來分享示例向量嗎? –

+1

[將N個分類的分類因子重新編碼爲N個二進制列]可能有重複(http://stackoverflow.com/questions/16200241/recode-categorical-factor-with-n-categories-into-n-binary-columns) –

回答

0
df <- read.table(file = "clipboard", sep = "\t", header=T) 

df <-data.frame(variable= c("red","red","black","red","black","green", 
     "black","red","green")) 
df 

    variable 
1  red 
2  red 
3 black 
4  red 
5 black 
6 green 
7 black 
8  red 
9 green 
class(df$variable) 
[1] "factor" 
model.matrix(~ . + 0, data=df, contrasts.arg = lapply(df, contrasts, contrasts=FALSE)) 

    variableblack variablegreen variablered 
1    0    0   1 
2    0    0   1 
3    1    0   0 
4    0    0   1 
5    1    0   0 
6    0    1   0 
7    1    0   0 
8    0    0   1 
9    0    1   0