我发送所有数据,以便您自己重现
example2<- as.data.frame(c("A", "A", "B", "B", "B", "G", "G", "E", "E", "F"))
example3<- as.data.frame(c("1", "2", "1", "5", "4", "1", "2", "3", "1", "4"))
example4<-data.frame(example2,example3)
names(example4)<-c("NIT","Esp")
example4
NIT Esp
1 A 1
2 A 2
3 B 1
4 B 5
5 B 4
6 G 1
7 G 2
8 E 3
9 E 1
10 F 4
我有这个10 x 2矩阵。 NIT和Esp都是因子变量。
每个字母都是一个主题,每个数字都是特定主题的特征。 例如:主题A具有特征1和2,主题B具有特征1,5,4,
我想为每个特征1,2,3,4,5创建一个虚拟变量。如果A具有特征2,那么它产生1,如果不具有产生0。
我试过这个解决方案
for(level in unique(example4$Esp)){
example4[paste("dummy", level, sep = "_")] <- ifelse(example4$Esp == level, 1, 0)
}
我远远超过了我所管理的
NIT Esp dummy_1 dummy_2 dummy_5 dummy_4 dummy_3
1 A 1 1 0 0 0 0
2 A 2 0 1 0 0 0
3 B 1 1 0 0 0 0
4 B 5 0 0 1 0 0
5 B 4 0 0 0 1 0
6 G 1 1 0 0 0 0
7 G 2 0 1 0 0 0
8 E 3 0 0 0 0 1
9 E 1 1 0 0 0 0
10 F 4 0 0 0 1 0
然而,这是我真正想要的矩阵。
最终的Matrix应该有6行x 5列,它应该是这样的
NIT Esp1 Esp2 Esp3 Esp4 Esp5
A 1 1 0 0 0
B 1 0 0 1 1
G 1 1 0 0 0
E 1 0 1 0 0
F 0 0 0 1 0