0

我发送所有数据,以便您自己复制

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
4

0 回答 0