Подтвердить что ты не робот

Преобразование коэффициентов R в значения двоичной матрицы

Я хотел бы преобразовать свой dataframe в матрицу, которая расширяет один фактор-столбец на несколько и назначает 1/0 в зависимости от фактора. Например

C1 C2 C3
A  3  5
B  3  4
A  1  1

Должно превратиться во что-то вроде

C1_A C1_B C2 C3
1      0  3  5
0      1  3  4
1      0  1  1

Как я могу это сделать в R? Я пробовал data.matrix, as.matrix, который не возвращал то, что я хотел. Они присваивают "целочисленное" значение одному столбцу факторов, нет расширения.

4b9b3361

Ответ 1

Предполагая, что dat является вашим фреймом данных:

cbind(dat, model.matrix( ~ 0 + C1, dat))

  C1 C2 C3 C1A C1B
1  A  3  5   1   0
2  B  3  4   0   1
3  A  1  1   1   0

Это решение работает с любым количеством факторов и без указания имен столбцов.

Если вы хотите исключить столбец C1, вы можете использовать эту команду:

cbind(dat[-1], model.matrix( ~ 0 + C1, dat))

Ответ 2

dat <- read.table(text =' C1 C2 C3
A  3  5
B  3  4
A  1  1',header=T)

Использование преобразования

transform(dat,C1_A =ifelse(C1=='A',1,0),C1_B =ifelse(C1=='B',1,0))[,-1]
  C2 C3 C1_A C1_B
1  3  5    1    0
2  3  4    0    1
3  1  1    1    0

Или для большей гибкости, within

within(dat,{ 
             C1_A =ifelse(C1=='A',1,0)
             C1_B =ifelse(C1=='B',1,0)})

  C1 C2 C3  C1_B C1_A
1  A  3  5    0    1
2  B  3  4    1    0
3  A  1  1    0    1

Ответ 3

Позвоните в свой файл data.frame df:

library(reshape2)
dcast(df,C2*C3~C1,fill=0,length)

  C2 C3 A B
1  1  1 1 0
2  3  4 0 1
3  3  5 1 0