我发送所有数据,以便您自己复制
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
尽管如此,这是我真正想要的矩阵。
最终的矩阵应该有 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