您正在寻找的功能是stack
and contrasts
.
data<-list(bob=c(8,9,10),mike=c(2,3,4),sandr=c(5,6,7))
as.data.frame(data)
bob mike sandr
1 8 2 5
2 9 3 6
3 10 4 7
stack(data)
values ind
1 8 bob
2 9 bob
3 10 bob
4 2 mike
5 3 mike
6 4 mike
7 5 sandr
8 6 sandr
9 7 sandr
df<-stack(data)
contrasts(df$ind,contrasts=FALSE)[df$ind,df$ind]
bob bob bob mike mike mike sandr sandr sandr
bob 1 1 1 0 0 0 0 0 0
bob 1 1 1 0 0 0 0 0 0
bob 1 1 1 0 0 0 0 0 0
mike 0 0 0 1 1 1 0 0 0
mike 0 0 0 1 1 1 0 0 0
mike 0 0 0 1 1 1 0 0 0
sandr 0 0 0 0 0 0 1 1 1
sandr 0 0 0 0 0 0 1 1 1
sandr 0 0 0 0 0 0 1 1 1
您可以指定行名称和列名称,并根据需要进行排序
im<-contrasts(df$ind,contrasts=FALSE)[df$ind,df$ind]
rownames(im)<-df$values
colnames(im)<-df$values