Преобразование коэффициентов 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
, который не возвращал то, что я хотел. Они присваивают "целочисленное" значение одному столбцу факторов, нет расширения.
Ответы
Ответ 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