2014-06-19 8 views
1

의 번호를 찾으려면 :같은 데이터 세트의 경우 패턴

21 79 
78 245 
21 186 
65 522 
4 21 
3 4 
4 212 
4 881 
124 303 
28 653 
28 1231 
7 464 
7 52 
17 102 
16 292 
65 837 
28 203 
28 1689 
136 2216 
7 1342 
56 412 

나는 관련 패턴의 번호를 찾을 필요가있다. 예를 들어 21-79와 21-186은 21을 공유합니다. 그래서 그들은 1 패턴을 형성합니다. 또한 21은 4-21에 있습니다. 이 모서리도 동일한 패턴에 기여합니다. 지금 4-881, 4-212, 3-4는 가장자리가 4입니다. 또한 같은 패턴에 기여합니다. 따라서, 에지 21-79, 21-186, 4-21, 4-881, 4-212, 3-4는 1 패턴을 형성합니다. 마찬가지로 다른 패턴이 있습니다. 따라서 패턴 (또는 서브 그래프)을 형성하기 위해 하나의 노드가 공통 인 모든 모서리를 그룹화해야합니다. 주어진 데이터 세트에는 총 4 개의 패턴이 있습니다. 그럴 수있는 코드를 작성해야합니다. 패턴의.

도와주세요. 그것은 나에게 정말로 중요합니다.

답변

3

그래프를 매우 잘 알고있는 igraph 패키지를 하위 그래프로 사용하는 이유는 무엇입니까? 그래서 여기 data.frame 형태

dd <- structure(list(V1 = c(21L, 78L, 21L, 65L, 4L, 3L, 4L, 4L, 124L, 
    28L, 28L, 7L, 7L, 17L, 16L, 65L, 28L, 28L, 136L, 7L, 56L), V2 = c(79L, 
    245L, 186L, 522L, 21L, 4L, 212L, 881L, 303L, 653L, 1231L, 464L, 
    52L, 102L, 292L, 837L, 203L, 1689L, 2216L, 1342L, 412L)), .Names = c("V1", 
    "V2"), class = "data.frame", row.names = c(NA, -21L)) 

사용자가 제공 한 데이터가 에지리스트처럼 정말 그래서 우리는 정점 이름으로 각 값을 처리 할 수에서 데이터를합니다. 따라서 우리는 당신이 정말 "패턴"의 수를 알고 싶어 이제 (plot(gg))

graph data

다음 그래프의 결과 노드와 정점을 정의

library(igraph) 
gg <- graph.edgelist(cbind(as.character(dd$V1), as.character(dd$V2)), 
    directed=F) 

와의 그래프를 만들 이 데이터에 연결된 하위 그래프로 표시됩니다. clusters() 명령을 사용하여 해당 정보를 추출 할 수 있습니다. 구체적으로,

clusters(gg)$no 
# [1] 10 

제공된 데이터에는 10 개의 클러스터가 있음을 보여줍니다. 그러나 꼭지점이 두 개 이상인 경우 만 원합니다. 우리가 얻을 수있는 것

sum(clusters(gg)$csize>2) 
# [1] 4 

네가 기대했던대로.

+1

이것은 검색하기가 힘든 문제이지만 내 이전 질문과 동일한 문제입니다. http://stackoverflow.com/questions/12135971/identify-groups-of-linked-episodes-which-chain 함께? – thelatemail

+0

고마워요! 그래, 내 질문은이 링크에 게시 된 것과 비슷하다. 그러나 라이브러리 igraph를 포함 시키려고 할 때 오류가 발생합니다 : "igraph라는 패키지가 없습니다". 여기 좀 도와 줄 수 있니? – phoenix

+1

@phoenix 라이브러리가 없으면 먼저 설치해야합니다. R 안에'install.packages ("igraph")를 실행하면된다. – MrFlick