이 문제에 접근하려고하는 방법은 위에서 언급 한 것처럼 variable1과 variable2 사이의 거리를 신경 써야합니다. 따라서 나는 distance라는 새로운 필드를 만들 것입니다. (나는 diff라는 이름 아래에 있습니다) 이것은 variable1-variable2로 계산됩니다. 그런 다음 해당 열을 기준으로 데이터 프레임을 정렬하고 행별로 데이터 프레임을 나눕니다. 즉, 홀수 행은 모두 pot1로 이동하고 모든 짝수 행은 pot2로 이동합니다. 이는 예로서 다음과 같은 코드로 설명된다 :
id<-1:2000
a<-runif(2000,-100,100)
b<-runif(2000,-200,200)
mydf <- data.frame(id,a,b)
mydf['diff'] <- mydf[['a']] - mydf[['b']]
mydf<-mydf[with(mydf, order(diff)), ]
head(mydf,20)
출력 :
> head(mydf,20) #as you can see the dataframe is ordered by diff (ascending)
id a b diff
1732 1732 -95.96522 198.1666 -294.1318
187 187 -94.24905 196.9341 -291.1831
338 338 -95.31069 194.9997 -290.3104
231 231 -91.98249 194.0672 -286.0497
1513 1513 -97.01006 183.5874 -280.5974
715 715 -94.53303 185.1026 -279.6356
145 145 -99.73511 178.2460 -277.9811
979 979 -87.73586 190.0489 -277.7848
1165 1165 -85.53447 187.6254 -273.1598
1243 1243 -94.75502 176.8572 -271.6122
1208 1208 -77.32021 189.1589 -266.4791
1826 1826 -92.23949 171.6341 -263.8736
167 167 -98.84123 163.6960 -262.5372
1283 1283 -76.54766 185.8721 -262.4197
1391 1391 -72.04732 189.9422 -261.9896
322 322 -77.53867 183.4744 -261.0131
75 75 -88.04799 171.9066 -259.9546
882 882 -65.11661 193.8533 -258.9699
1119 1119 -77.59978 181.2392 -258.8390
1624 1624 -81.81879 175.9795 -257.7983
이제 dataframe 분할 :
samplea_1<-NULL
samplea_2<-NULL
sampleb_1<-NULL
sampleb_2<-NULL
id_1<-NULL
id_2<-NULL
diff_1<-NULL
diff_2<-NULL
for (i in 1:nrow(mydf)) {
if(i%%2==0) {
samplea_1 <- append(samplea_1,mydf$a[i])
sampleb_1 <- append(sampleb_1,mydf$b[i])
id_1 <- append(id_1,mydf$id[i])
diff_1 <- append(diff_1,mydf$diff[i])
} else {
samplea_2 <- append(samplea_2,mydf$a[i])
sampleb_2 <- append(sampleb_2,mydf$b[i])
id_2 <- append(id_2,mydf$id[i])
diff_2 <- append(diff_2,mydf$diff[i])
}
}
sample1<-data.frame(samplea_1,sampleb_1,id_1,diff_1)
sample2<-data.frame(samplea_2,sampleb_2,id_2,diff_2)
summary(sample1)
summary(sample2)
출력 :
> summary(sample1)
samplea_1 sampleb_1 id_1 diff_1
Min. :-99.2058 Min. :-199.519 Min. : 1.0 Min. :-291.183
1st Qu.:-47.5615 1st Qu.:-100.917 1st Qu.: 495.8 1st Qu.:-105.851
Median : 1.3997 Median : 7.004 Median : 980.5 Median : -1.333
Mean : 0.7047 Mean : 2.044 Mean : 991.0 Mean : -1.340
3rd Qu.: 50.4087 3rd Qu.: 101.678 3rd Qu.:1482.8 3rd Qu.: 99.381
Max. : 99.8470 Max. : 199.833 Max. :2000.0 Max. : 291.797
> summary(sample2)
samplea_2 sampleb_2 id_2 diff_2
Min. :-99.7351 Min. :-199.9494 Min. : 2.0 Min. :-294.132
1st Qu.:-48.4339 1st Qu.: -99.7880 1st Qu.: 509.8 1st Qu.:-106.338
Median : -1.4627 Median : 6.8745 Median :1024.0 Median : -1.425
Mean : -0.7104 Mean : 0.9099 Mean :1010.0 Mean : -1.620
3rd Qu.: 48.1663 3rd Qu.: 94.7360 3rd Qu.:1513.2 3rd Qu.: 99.334
Max. : 99.9496 Max. : 199.8544 Max. :1996.0 Max. : 288.840
을 diff 열이 alm을 볼 수 있습니다. ost 동일한 의미는 약간 직관적입니다. 왜냐하면 우리가 해당 컬럼에 따라 데이터 프레임을 정렬했기 때문입니다. 그러나 볼 수 있듯이, 컬럼 samplea와 sampleb에서 거의 같습니다. 이것은 diff가 a와 b에서 파생 되었기 때문에 발생하지만 각 열 a와 b에 대한 분산이 얼마나 큰지에 따라 결과가 덜 정확합니다.
희망 하시겠습니까?
정말로 좋아하는 소리 ** 클러스터링 **. 특히 2 클러스터로. 하지만 평등 - 총 차이 통계는 비표준입니다. http://en.wikipedia.org/wiki/K-means_clustering – smci
@speldosa 참고로, 나는이 경우 k-means가 작동하지 않을 것이라고 생각합니다. 2 개의 centroid는 실제적으로 2 개의 sample의 수단이 될 것이고 그렇지 않다면 명백하게 동일하지 않을 수 있습니다. 그렇지 않으면 우리는 2 개의 cluster를 갖지 않을 것이기 때문입니다. 무게 중심이 가능한 한 멀리 떨어져 있으면 가장 좋습니다. [here] (http://home.deib.polimi.it/matteucc/Clustering/tutorial_html/kmeans.html)도 확인할 수 있습니다. 추신 나는 항상 토론을 위해 열려 있습니다 :) – LyzandeR
@smci 미안, 위의 메시지는 당신에게 말했지만 speldosa가 아닙니다. :) 미안합니다. – LyzandeR