从2维提取图形

时间:2017-03-30 18:35:31

标签: r igraph

拥有这些数据:

       keyword1  keyword2  keyword3
  art1    0          1        0
  art2    1          1        0
  art3    0          0        1

可以使用以下方法提取图表:

    library(igraph)
    df1<-data.frame(keyword1=c(0,1,0),keyword2=c(1,1,0),keyword3=c(0,0,1),row.names=c("art1","art2","art3"))
  df1.mt <- as.matrix(df1)
  df1.adj <- t(df1.mt) %*% df1.mt
    diag(df1.adj) <- 0
    g <- graph.adjacency(df1.adj)
    plot(g)

如果数据具有以下格式:

        keyword1  keyword2  keyword3 
  artA      0          1        0 
  artA      1          1        0  
  artB      0          0        1
  artB      1          1        0  
  artC      1          1        0   

如何提取图表?

1 个答案:

答案 0 :(得分:0)

这是一个函数,它采用二进制矩阵并为列创建邻接矩阵,其中两列被认为是相邻的,如果对于某些行,这些列中的两个条目都是1:

adj.matrix <- function(B){
  n <- ncol(B)
  g <- expand.grid(1:n,1:n)
  adj <- apply(g,MARGIN = 1, FUN = function(v){max(pmin(B[,v[1]],B[,v[2]]))})
  dim(adj) <- c(n,n)
  diag(adj) <- 0
  colnames(adj) <- colnames(B)
  row.names(adj) <- colnames(B)
  graph.adjacency(adj)
}

测试它:

B <- rbind(c(1,1,0,0,0),
          c(0,0,1,1,0),
          c(0,0,0,1,1),
          c(0,0,1,0,1))
colnames(B) <- c("A","B","C","D","E")

g <- adj.matrix(B)
plot(g)

结果图:

enter image description here

我不是100%确定你打算用第二种格式做什么。看起来您的第二种格式是以下格式的数据框:

df <- data.frame(names=c("artA","artA","artB","artB","artC"),keyword1=c(0,1,0,1,1),keyword2=c(1,1,0,1,1),keyword3=c(0,0,1,0,0))

是:

  names keyword1 keyword2 keyword3
1  artA        0        1        0
2  artA        1        1        0
3  artB        0        0        1
4  artC        1        1        0
5  artC        1        1        0

您可以通过适当使用aggregate将其用于适合上述功能的格式:

> df <- aggregate(. ~ names,data = df, max)
> row.names(df) <- as.character(df$names)
> df$names <- NULL
> df
     keyword1 keyword2 keyword3
artA        1        1        0
artB        1        1        1
artC        1        1        0

在此阶段,df看起来就像是您的第一个表格,而as.matrix(df)可能会被投放到函数adj.matrix()