回答編集履歴
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
|