我有一个类似于下面的数据框:
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
我从每个集群中挑选最大值,然后比较它们,然后重新排序集群,但代码看起来很笨拙......有没有更好的方法呢?
非常感谢!!!