如何将R中的两个因子转换为邻接矩阵?
我有一个包含两列(键和值)的数据框,其中每列都是一个因子:如何将R中的两个因子转换为邻接矩阵?,r,matrix,pivot-table,R,Matrix,Pivot Table,我有一个包含两列(键和值)的数据框,其中每列都是一个因子: df = data.frame(gl(3,4,labels=c('a','b','c')), gl(6,2)) colnames(df) = c("key", "value") key value 1 a 1 2 a 1 3 a 2 4 a 2 5 b 3 6 b 3 7 b 4 8 b 4 9 c 5 1
df = data.frame(gl(3,4,labels=c('a','b','c')), gl(6,2))
colnames(df) = c("key", "value")
key value
1 a 1
2 a 1
3 a 2
4 a 2
5 b 3
6 b 3
7 b 4
8 b 4
9 c 5
10 c 5
11 c 6
12 c 6
我想将其转换为邻接矩阵(在本例中为3x6大小),如下所示:
因此,我可以使用kmeans或hclust在其上运行集群(将具有相似值的键组合在一起)
我能得到的最接近的结果是使用model.matrix(~value,df)
,结果是:
(Intercept) value2 value3 value4 value5 value6
1 1 0 0 0 0 0
2 1 0 0 0 0 0
3 1 1 0 0 0 0
4 1 1 0 0 0 0
5 1 0 1 0 0 0
6 1 0 1 0 0 0
7 1 0 0 1 0 0
8 1 0 0 1 0 0
9 1 0 0 0 1 0
10 1 0 0 0 1 0
11 1 0 0 0 0 1
12 1 0 0 0 0 1
但结果还没有按键分组
从另一方面,我可以使用以下方法将此数据集折叠为组:
aggregate(df$value, by=list(df$key), unique)
Group.1 x.1 x.2
1 a 1 2
2 b 3 4
3 c 5 6
但我不知道下一步该怎么办
有人能帮忙解决这个问题吗?在
base
R中一个简单的方法:
res <-table(df)
res[res>0] <-1
res
value
#key 1 2 3 4 5 6
# a 1 1 0 0 0 0
# b 0 0 1 1 0 0
# c 0 0 0 0 1 1
res0]在base
R中执行此操作的简单方法:
res <-table(df)
res[res>0] <-1
res
value
#key 1 2 3 4 5 6
# a 1 1 0 0 0 0
# b 0 0 1 1 0 0
# c 0 0 0 0 1 1
res0]太棒了!这正是我们所需要的!非常感谢。令人惊叹的!这正是我们所需要的!非常感谢。