1

以下のようなデータ フレームがあります。

data<-data.frame(COL1=c(rep("111",20),rep("222",20)),COL2=c(rep("A",10),rep("B",10),rep("A",10),rep("B",10)),DATA=c(runif(5,0.1,0.9),runif(5,4,5),runif(5,0.1,0.9),runif(5,4,5),runif(5,0.1,0.9),runif(5,4,5),runif(5,0.1,0.9),runif(5,4,5)))


   COL1 COL2      DATA
1   111    A 0.6589137
2   111    A 0.4791792
3   111    A 0.5192251
4   111    A 0.5477179
5   111    A 0.6042456
6   111    A 4.4296944
7   111    A 4.9811469
8   111    A 4.5962728
9   111    A 4.0031918
10  111    A 4.5544146
11  111    B 0.5128113
12  111    B 0.7389391
13  111    B 0.4927115
14  111    B 0.1817374
15  111    B 0.4768918
16  111    B 4.3521823
17  111    B 4.4698346
18  111    B 4.8915773
19  111    B 4.5110891
20  111    B 4.0065105
21  222    A 0.6943656
22  222    A 0.5678733
23  222    A 0.5874319
24  222    A 0.1088618
25  222    A 0.8541726
26  222    A 4.8997936
27  222    A 4.1151180
28  222    A 4.4085173
29  222    A 4.2121693
30  222    A 4.5036859
31  222    B 0.8518654
32  222    B 0.7736430
33  222    B 0.4561808
34  222    B 0.2723595
35  222    B 0.1602266
36  222    B 4.7649421
37  222    B 4.4689368
38  222    B 4.9889973
39  222    B 4.6369252
40  222    B 4.2927547

列 COL1 と COL2 に基づいて、データに 2 つのクラスターを割り当てる必要があります。

以下のように ddply を使用して集計しましたが、クラスターがランダムに割り当てられました。

ddply(data,.(COL1,COL2),summarise,DATA=DATA,clusters=kmeans(DATA,centers=2,iter.max=500)$cluster)

   COL1 COL2      DATA clusters
1   111    A 0.6589137        2
2   111    A 0.4791792        2
3   111    A 0.5192251        2
4   111    A 0.5477179        2
5   111    A 0.6042456        2
6   111    A 4.4296944        1
7   111    A 4.9811469        1
8   111    A 4.5962728        1
9   111    A 4.0031918        1
10  111    A 4.5544146        1
11  111    B 0.5128113        2
12  111    B 0.7389391        2
13  111    B 0.4927115        2
14  111    B 0.1817374        2
15  111    B 0.4768918        2
16  111    B 4.3521823        1
17  111    B 4.4698346        1
18  111    B 4.8915773        1
19  111    B 4.5110891        1
20  111    B 4.0065105        1
21  222    A 0.6943656        1
22  222    A 0.5678733        1
23  222    A 0.5874319        1
24  222    A 0.1088618        1
25  222    A 0.8541726        1
26  222    A 4.8997936        2
27  222    A 4.1151180        2
28  222    A 4.4085173        2
29  222    A 4.2121693        2
30  222    A 4.5036859        2
31  222    B 0.8518654        2
32  222    B 0.7736430        2
33  222    B 0.4561808        2
34  222    B 0.2723595        2
35  222    B 0.1602266        2
36  222    B 4.7649421        1
37  222    B 4.4689368        1
38  222    B 4.9889973        1
39  222    B 4.6369252        1
40  222    B 4.2927547        1

下のクラスターに低い値を割り当てて、以下のようにするにはどうすればよいですか?

   COL1 COL2      DATA CLUSTER
1   111    A 0.4501382       1
2   111    A 0.5396776       1
3   111    A 0.1534554       1
4   111    A 0.7031021       1
5   111    A 0.7345412       1
6   111    A 4.9698809       2
7   111    A 4.9623179       2
8   111    A 4.3449659       2
9   111    A 4.7022103       2
10  111    A 4.6236821       2
11  111    B 0.3343663       1
12  111    B 0.3664970       1
13  111    B 0.1355580       1
14  111    B 0.4256151       1
15  111    B 0.2017380       1
16  111    B 4.3215547       2
17  111    B 4.2263868       2
18  111    B 4.6150686       2
19  111    B 4.4623177       2
20  111    B 4.8687472       2
21  222    A 0.2413381       1
22  222    A 0.8124635       1
23  222    A 0.7832933       1
24  222    A 0.6445864       1
25  222    A 0.1860951       1
26  222    A 4.4659675       2
27  222    A 4.5866642       2
28  222    A 4.8920004       2
29  222    A 4.2855749       2
30  222    A 4.5555983       2
31  222    B 0.1678164       1
32  222    B 0.5800995       1
33  222    B 0.1556406       1
34  222    B 0.1761227       1
35  222    B 0.4119303       1
36  222    B 4.1318505       2
37  222    B 4.4020672       2
38  222    B 4.3807045       2
39  222    B 4.3920436       2
40  222    B 4.7933142       2

各クラスターから最大値を選択して比較し、クラスターを並べ替えていますが、コードは本当にぎこちなく見えます...それを行うより良い方法はありますか?

どうもありがとう!!!

4

0 に答える 0