【问题标题】:How to convert two factors to adjacency matrix in R?如何将两个因子转换为R中的邻接矩阵?
【发布时间】:2015-11-07 19:13:10
【问题描述】:

我有一个包含两列(键和值)的数据框,其中每一列都是一个因素:

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 大小),例如:

  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

这样我就可以使用 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

但我不知道下一步该做什么......

有人可以帮忙解决这个问题吗?

【问题讨论】:

    标签: r matrix pivot-table


    【解决方案1】:

    baseR 中实现这一点的简单方法:

    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
    

    【讨论】:

    • 太棒了!这正是所需要的!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    相关资源
    最近更新 更多