bugfix> r > 投稿

次のようないくつかの出版物に関連するデータの表があります。

PubID   Author
169759  ZJ
174843  RA
174843  DJ
174843  JP
174843  GS
174843  Tv
171051  MC
171051  JR
171051  CW
171719  PB
171719  MD
171719  FO
169759  FO
173847  RA
173847  DJ

そして、これをigraphへの入力用のエッジリストに変えて、共著者ネットワークを表示したいと思います(例えば、RAとDJが2つの論文を一緒に持っている)。合計で約7000個のIDがあります。ネットワークのビットは大丈夫ですが、データからエッジリストを取得する方法がわかりません。手伝ってくれますか?

回答 2 件
  • このようなものを探していますか:

    library(igraph)
    
    PubID <- c("169759","174843","174843","174843","174843","174843","171051","171051","171051","171719","171719","171719","169759","173847","173847")
    Author <- c("ZJ","RA","DJ","JP","GS","Tv","MC","JR","CW","PB","MD","FO","FO","RA","DJ")
    dt <- data.frame(Author,PubID)
    levs <- unique(unlist(dt, use.names = FALSE))
    adj <- table(lapply(dt, factor, levs))
    g1 <- graph_from_adjacency_matrix( adj )
    plot(g1)
    
    

    データから隣接行列を作成しました。

  • 以下は、整頓されたデータに基づいたいくつかのデータに基づくソリューションです。著者間の一般的な論文の数は n として保存されます  エッジ属性で

    PubID <- c("169759","174843","174843","174843","174843","174843","171051","171051","171051","171719","171719","171719","169759","173847","173847") Author <- c("ZJ","RA","DJ","JP","GS","Tv","MC","JR","CW","PB","MD","FO","FO","RA","DJ") dt <- data.frame(Author,PubID) library(tidyverse) library(igraph) dt %>% mutate(author_id = as.integer(Author)) -> dt dt %>% inner_join(dt, by = "PubID") %>% filter(author_id.x < author_id.y) %>% count(Author.x, Author.y) %>% graph_from_data_frame(directed = FALSE) -> g1 plot(g1) as_data_frame(g1, what = "edges")

あなたの答え