2014-06-20 65 views
-1

我有以下形式的data.frame鄰接矩陣...創建列與IDS

id f1 f2 f3 f4 n... 
01 02 03 . . . 
02 01 04 . 05 . 
03 01 04 05 . . 
04 05 02 01 . . 
05 02 . . . . 
n 02 03 01 . . 

,我試圖重新編寫此爲其中兩列和行被區分的對稱鄰接矩陣成員id和單元格表示一對id之間的關係。

我已經嘗試過R中的igraph軟件包,但似乎函數get.adjacency只將前兩列看作是邊界列表。

任何幫助將不勝感激。

謝謝。

+0

我不清楚這個輸入的結果是什麼。什麼是「會員ID」?不同的列代表什麼?這些行代表什麼?單元格值代表什麼? – MrFlick

+0

成員標識只是原始示例中的列標識。每列表示與原始「成員id」(id)關聯的一組id。行是每個成員的id其他id似乎被提名...我想恢復的單元格值是來自原始數據集(示例中)似乎是「聯合」的兩個id的發生率...希望這有助於澄清MrFlick – user3761786

回答

1

好的。讓我們假設這是你的原始數據集

dd <- data.frame(
    id = c("01", "02", "03", "04", "05"), 
    f1 = c("02", "01", "01", "05", "02"), 
    f2 = c("03", "04", "04", "02", NA), 
    f3 = c(NA, NA, "05", "01", NA), 
    f4 = c(NA, "05", NA, NA, NA) 
) 

我們可以通過在該行的其他非缺失值的id列加入所有的值提取類似的EdgeList都。我們可以做到這一點簡單地

edges <- do.call(rbind, Map(cbind, dd[,1], apply(dd[,-1], 1, na.omit))) 

我們也提取了獨特的會員ID和頂點

vertices <- unique(as.vector(ids)) 
N <- length(vertices) 

現在我們可以建立兩種方式的鄰接矩陣的總數。我們可以在一個只使用矩陣索引

adj<-matrix(0, nrow=N, ncol=N, dimnames=list(vertices, vertices)) 
adj[edges]<-1 

做,或者我們可以使用的igraph庫

library(igraph) 
gg<-simplify(graph.edgelist(edges, directed=F)) 
get.adjacency(gg) 

igraph應確保對稱性(樣本數據不是對稱的)。它將返回

01 02 03 04 05 
01 . 1 1 1 . 
02 1 . . 1 1 
03 1 . . 1 1 
04 1 1 1 . 1 
05 . 1 1 1 . 
+0

這個問題,非常感謝@MrFlick – user3761786