回答編集履歴
3
説明の改善
    
        answer	
    CHANGED
    
    | 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            [igraph パッケージ](https://cran.r-project.org/web/packages/igraph/index.html) を用い,データの各行を頂点とする無向グラフを使ってグループ分けする記述例を下記に示します。
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            * 隣接行列(`w`)を用意し, 
     | 
| 
      
 3 
     | 
    
         
            +
            * 隣接行列(`w`)を用意し,両頂点が「3変数のどれかを共有しているか否か」で「`1`と`0` 」を(無向グラフに必要な左下三角部分に)格納する
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
5 
     | 
    
         
             
            * 隣接行列(`w`)から無向グラフ(`g`)を作成する
         
     | 
| 
       6 
6 
     | 
    
         | 
2
書式の改善
    
        answer	
    CHANGED
    
    | 
         @@ -27,7 +27,7 @@ 
     | 
|
| 
       27 
27 
     | 
    
         
             
            }
         
     | 
| 
       28 
28 
     | 
    
         | 
| 
       29 
29 
     | 
    
         
             
            g <- graph_from_adjacency_matrix(w, mode="lower")
         
     | 
| 
       30 
     | 
    
         
            -
            data$group_id  
     | 
| 
      
 30 
     | 
    
         
            +
            data$group_id <- components(g)$membership
         
     | 
| 
       31 
31 
     | 
    
         | 
| 
       32 
32 
     | 
    
         
             
            print(data)
         
     | 
| 
       33 
33 
     | 
    
         
             
            ##    V1 V2 V3 group_id
         
     | 
1
より簡単な方法に回答を修正
    
        answer	
    CHANGED
    
    | 
         @@ -1,14 +1,12 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            [igraph パッケージ](https://cran.r-project.org/web/packages/igraph/index.html) を用い,データの各行を頂点とする無向グラフを使ってグループ分けする記述例を下記に示します。
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            *  
     | 
| 
      
 3 
     | 
    
         
            +
            * 隣接行列(`w`)を用意し,辺の両頂点が「3変数のどれかを共有しているか否か」で「`1`と`0` 」を(無向グラフに必要な左下三角部分に)格納する
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
            * 隣接行列(`w`)から 
     | 
| 
      
 5 
     | 
    
         
            +
            * 隣接行列(`w`)から無向グラフ(`g`)を作成する
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
     | 
    
         
            -
            *  
     | 
| 
      
 7 
     | 
    
         
            +
            * 関数 `components(g)` が出力する `membership` ベクトルを `group_id` として `data` に追加する
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
     | 
    
         
            -
            * 行列(`u`)の各行の「値がゼロの列番号」を `group_id` として `data` に追加する
         
     | 
| 
       10 
9 
     | 
    
         | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
10 
     | 
    
         
             
            ```R
         
     | 
| 
       13 
11 
     | 
    
         
             
            library(igraph)
         
     | 
| 
       14 
12 
     | 
    
         | 
| 
         @@ -24,23 +22,13 @@ 
     | 
|
| 
       24 
22 
     | 
    
         
             
                    w[i, j] <- ifelse(any(data$V1[i] == data$V1[j],
         
     | 
| 
       25 
23 
     | 
    
         
             
                                          data$V2[i] == data$V2[j],
         
     | 
| 
       26 
24 
     | 
    
         
             
                                          data$V3[i] == data$V3[j]),
         
     | 
| 
       27 
     | 
    
         
            -
                                       
     | 
| 
      
 25 
     | 
    
         
            +
                                      1, 0)
         
     | 
| 
       28 
26 
     | 
    
         
             
                }
         
     | 
| 
       29 
27 
     | 
    
         
             
            }
         
     | 
| 
       30 
28 
     | 
    
         | 
| 
       31 
     | 
    
         
            -
            g <- graph_from_adjacency_matrix(w, mode="lower" 
     | 
| 
      
 29 
     | 
    
         
            +
            g <- graph_from_adjacency_matrix(w, mode="lower")
         
     | 
| 
       32 
     | 
    
         
            -
            d <- distances(g)
         
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
      
 30 
     | 
    
         
            +
            data$group_id = components(g)$membership
         
     | 
| 
       34 
31 
     | 
    
         | 
| 
       35 
     | 
    
         
            -
            for (i in 1:N) {
         
     | 
| 
       36 
     | 
    
         
            -
                for (j in 1:ncol(u)) {
         
     | 
| 
       37 
     | 
    
         
            -
                    if (u[i, j] < 1) {
         
     | 
| 
       38 
     | 
    
         
            -
                        data$group_id[i] <- j
         
     | 
| 
       39 
     | 
    
         
            -
                        break
         
     | 
| 
       40 
     | 
    
         
            -
                    }
         
     | 
| 
       41 
     | 
    
         
            -
                }
         
     | 
| 
       42 
     | 
    
         
            -
            }
         
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
32 
     | 
    
         
             
            print(data)
         
     | 
| 
       45 
33 
     | 
    
         
             
            ##    V1 V2 V3 group_id
         
     | 
| 
       46 
34 
     | 
    
         
             
            ## 1   1  1  1        1
         
     |