2016-06-17 6 views
1

두 data.frames df1과 함께 df2부터 출발 (전체 접속 행렬을 계산하지 않고), I는 다음iGraph, R - 사이 키 가입 이분 단체 서브 입사 행렬

같은 data.frame 끝낼
# df3 
#  V ID1 X  ID2 
# 1  V1 1  X2 12 
# 2  V2 2  X1 11 
# 3  V2 2  X2 12 
# 4  V3 3  X2 12 
# 5  V2 2  X3 13 
# 6  V4 4  X3 13 
# 7  V5 5  X4 14 
# 8  V6 6  X4 14 
# 9  V7 7  X5 15 
# 10 V8 8  X5 15 
# 11 V9 9  X5 15 
# 12 V8 8  X6 16 
# 13 V10 10  X6 16 

여기에서 열 VX은 2 부분 그래프의 두 그룹을 식별하고 가장자리를 표시합니다. (나는 두 개의 열 ID1ID2을 다음에 추가합니다.) 이것으로부터 중간 단계로 이분 그래프 (BG)를 얻고 모든 클러스터 (최대 독립적 인 꼭지점)의 발생 행렬을 얻을 필요가 있습니다.

BG를 얻기 위해, 내가

df4 <- subset(df3, select=c("ID1","ID2")) 
bg <- make_bipartite_graph(c(rep(0,nrow(df1)),rep(1,now(df2))), c(t(df4))) 

먼저 질문을 사용하는 것, 다른 스마트 ID-열을 사용하지 않고 내 data.frame에서 이분 그래프를 얻을 수있는 방법이지만 직접 VX이있다?

그렇다면 클러스터의 경우 clusters 기능을 사용 하겠지만 발생률 매트릭스의 하위 집합을 얻는 방법은 알지 못합니다 (전체를 너무 크게 만들지 않고). 아이디어가 있습니까? 내가 가진 경우

답변

2

나는 당신이 바로,하지만 어쩌면 당신이

library(igraph) 
df <- df3[, c(1, 3)] 
g <- graph_from_data_frame(df) 
V(g)$type <- substr(V(g)$name, 1, 1)=="V" 
plot(as.undirected(g), layout=layout.bipartite(g)[, 2:1]) 

gs <- decompose(g) 
lapply(gs, as_incidence_matrix) 
# [[1]] 
# V1 V2 V3 V4 
# X2 1 1 1 0 
# X1 0 1 0 0 
# X3 0 1 0 1 
# 
# [[2]] 
# V5 V6 
# X4 1 1 
# 
# [[3]] 
# V7 V8 V9 V10 
# X5 1 1 1 0 
# X6 0 1 0 1 
+0

정확히이 원하는 몰라! 고마워요. 미안 해요, 제 포스트를 다시 읽었어요. 솔직히 말해서 제가 의미하는 바를 어떻게 알았습니까 !! :) – Stefano