2016-06-22 3 views
0

У меня есть данные, как показано ниже, и я хочу преобразовать эту переменную в столбцы, которые должны быть равны no.of классов в varible.Как преобразовать несколько классов в несколько столбцов в 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 
Смежные вопросы