2016-06-22 41 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