【问题标题】:Convert data frame edgelist into matrix while keeping row and column names将数据框边缘列表转换为矩阵,同时保留行名和列名
【发布时间】:2020-06-25 15:28:42
【问题描述】:

我在 R 中有一个具有相似度分数的边缘列表作为数据框:

example <- data.frame(Source = c(1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4),
                  Target = c(1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4),
                  Similarity = c(1,0,.2,0.1,.004,.1,0,0,1,2,0,.14,.006,0,1,.036))

Source 和 Target 列表示 ID,因此应将其视为因素而不是数字。忽略相似度值,我只是输入随机数来说明。

现在我想把这个边列表格式转换成一个矩阵,其中行名=Source,列名=Target,两者的交集就是Similarity。然后我会将数据输入到 Rtsne 包中进行绘图。

我尝试这样做:

m1 <- as.matrix(sparseMatrix(i = example$Source,
                         j = example$Target,
                         x = example$Similarity))

除了行和列没有命名标记之外,这很好用。

 m1
     [,1] [,2] [,3]  [,4]
[1,] 1.000  0.0  0.2 0.100
[2,] 0.004  0.1  0.0 0.000
[3,] 1.000  2.0  0.0 0.140
[4,] 0.006  0.0  1.0 0.036

我应该如何修改 as.matrix 代码以保留行/列标签?我将在稍后的过程中使用它们。

【问题讨论】:

    标签: r


    【解决方案1】:

    如果使用xtabs,可以直接保留dimnames

    xtabs(Similarity ~ Source + Target, example)
    #       Target
    # Source     1     2     3     4
    #      1 1.000 0.000 0.200 0.100
    #      2 0.004 0.100 0.000 0.000
    #      3 1.000 2.000 0.000 0.140
    #      4 0.006 0.000 1.000 0.036
    

    【讨论】:

      【解决方案2】:

      您可以为m1设置dimnames

      dimnames(m1) <- list(Source = unique(example$Source), 
                           Target = unique(example$Target))
      m1
      #>       Target
      #> Source     1   2   3     4
      #>      1 1.000 0.0 0.2 0.100
      #>      2 0.004 0.1 0.0 0.000
      #>      3 1.000 2.0 0.0 0.140
      #>      4 0.006 0.0 1.0 0.036
      

      【讨论】:

        【解决方案3】:

        acast 的选项来自reshape2

        library(reshape2)
        acast(example, Source ~ Target, value.var = 'Similarity')
        #      1   2   3     4
        #1 1.000 0.0 0.2 0.100
        #2 0.004 0.1 0.0 0.000
        #3 1.000 2.0 0.0 0.140
        #4 0.006 0.0 1.0 0.036
        

        或者使用来自base Rtapply

        tapply(example$Similarity, example[1:2], FUN = I)
        

        【讨论】:

          猜你喜欢
          • 2020-01-30
          • 2018-07-15
          • 2023-03-10
          • 2012-09-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-02-16
          相关资源
          最近更新 更多