【问题标题】:turn matrix into long data format将矩阵转换为长数据格式
【发布时间】:2015-02-05 22:04:41
【问题描述】:

我想把一个矩阵变成一个长的data.frame边缘列表的行到列,如下所示:

  set.seed(666)
  mat <- matrix(sample(0:1,12,replace=TRUE),nrow=3)
  library(bipartite)
  as.data.frame(web2edges(mat, return = TRUE))

但我希望行和列的名称出现在 rowcol 列的输出中,而不是行数。

但是当我尝试这个时,我得到一个重复的行名错误:

set.seed(666)
mat <- matrix(sample(0:1,12,replace=TRUE),nrow=3)
colnames(mat) <- letters[1:4]
rownames(mat) <- letters[5:7] 
library(bipartite)
as.data.frame(web2edges(mat, return = TRUE))

data.frame(row = c("1", "3", "3", "1", "2"), col = c("4", "4", ) 中的错误: 重复的row.names:g,e

有没有其他简单的方法可以在不使用web2edges 的情况下实现?

【问题讨论】:

  • 也许将web2edges()结果的rownames设置为NULL,然后转换为data.frame?或者直接做as.data.frame.table(mat) 然后subset。
  • 我喜欢表格和子集选项,@thelatemail 如果你想回答我很乐意接受。

标签: r networking matrix


【解决方案1】:

与矩阵不同,数据框不能有重复的行名。因此,与其更改web2edges 之前的行名和列名,不如事后更改。

set.seed(666)
mat <- matrix(sample(0:1,12,replace=TRUE),nrow=3)
library(bipartite)

#data frame with numerical values in `row` and `col` columns:
ndf <- as.data.frame(web2edges(mat, return = TRUE))

#converting `row` and `col` columns to factors:
ndf$col <- factor(ndf$col, levels = 4:7, labels = letters[1:4])
ndf$row <- factor(ndf$row, levels = 1:3, labels = letters[5:7])

> ndf
  row col edge.weights
1   e   a            1
2   g   a            1
3   g   b            1
4   e   c            1
5   f   d            1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-15
    • 1970-01-01
    相关资源
    最近更新 更多