【问题标题】:R- Convert adjacency data frame to edgelist type listR-将邻接数据框转换为edgelist类型列表
【发布时间】:2018-06-26 03:13:15
【问题描述】:

我需要将具有命名列和行(NxN 维度)的数据框更改为边缘列表。

例如数据框中的矩阵是:

     C1  C2  C3  C4
Ane  0   1   31  0
Jol  4   14  2   0
Ruf  3   3   11  6 
Rei  1   7    0  0

我想将其更改为列表(如边缘列表):

Ane-C1  0
Ane-C2  1
Ane-C3  31
Ane-C4  0
Jol-C1  4
Jol-C2  14
Jol-C3  2
Jol-C4  0
Ruf-C1  3
Ruf-C2  3
Ruf-C3  11
Ruf-C4  6
Rei-C1  1
Rei-C2  7
Rei-C3  0
Rei-C4  0

我发现的其他线程似乎只有列名/数据框不包含邻接矩阵。

我尝试将其制作成图表,然后 get.edgelist,还尝试了 [order(df[,1],df[1,]),,drop=FALSE],但这些并没有给出我想要的。 谁能教教我?

【问题讨论】:

  • reshape2::melt(yourmatrix)

标签: r list dataframe type-conversion adjacency-list


【解决方案1】:

base R 中,复制行名和列名,paste 它,根据矩阵的值创建一个data.frame

data.frame(name = paste(rownames(m1)[col(m1)], colnames(m1)[row(m1)], sep="-"),
          val = c(t(m1)), stringsAsFactors = FALSE)
#     name val
#1  Ane-C1   0
#2  Ane-C2   1
#3  Ane-C3  31
#4  Ane-C4   0
#5  Jol-C1   4
#6  Jol-C2  14
#7  Jol-C3   2
#8  Jol-C4   0
#9  Ruf-C1   3
#10 Ruf-C2   3
#11 Ruf-C3  11
#12 Ruf-C4   6
#13 Rei-C1   1
#14 Rei-C2   7
#15 Rei-C3   0
#16 Rei-C4   0

【讨论】:

    【解决方案2】:

    这是一个 tidyverse 解决方案。使用gather 将宽格式转换为长格式。然后,unite两列合二为一。

    library('tidyverse')
    
    df <- data.frame(
      C1 = c(0, 4, 3, 1),
      C2 = c(1, 14, 3, 7),
      C3 = c(31, 2, 11, 0),
      C4 = c(0, 0, 4, 0),
      row.names = c('Ane', 'Jol', 'Ruf', 'Rei')
    )
    
    df %>%
      rownames_to_column %>%
      gather(key = 'key', value = 'value', -rowname) %>%
      unite('name', rowname, key, sep = '-')
    #>      name value
    #> 1  Ane-C1     0
    #> 2  Jol-C1     4
    #> 3  Ruf-C1     3
    #> 4  Rei-C1     1
    #> 5  Ane-C2     1
    #> 6  Jol-C2    14
    #> 7  Ruf-C2     3
    #> 8  Rei-C2     7
    #> 9  Ane-C3    31
    #> 10 Jol-C3     2
    #> 11 Ruf-C3    11
    #> 12 Rei-C3     0
    #> 13 Ane-C4     0
    #> 14 Jol-C4     0
    #> 15 Ruf-C4     4
    #> 16 Rei-C4     0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-18
      • 2015-06-17
      • 2015-04-16
      • 1970-01-01
      • 2015-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多