Я бы попытался подойти к этой проблеме (как вы упомянули выше), чтобы заботиться о расстоянии между переменной1 и переменной2. Поэтому я бы создал новое поле с именем distance (ниже я назвал его diff), которое будет вычисляться как переменная1-переменная2. Затем я бы заказал фрейм данных по этому столбцу и разделил фрейм данных строка за строкой, т.е. каждая нечетная строка перешла бы в 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
а теперь разделим фрейм данных:
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 имеют почти одинаковое среднее значение, которое немного интуитивно понятно, потому что мы упорядочили фрейм данных в соответствии с этим столбцом, но, как вы можете видеть, то же самое примерно одинаково для столбцов samplea и sampleb! Это происходит потому, что разница получается из a и b, но результаты будут менее точными в зависимости от того, насколько высока дисперсия для каждого отдельного столбца a и b.
Надеюсь, это поможет!
person
LyzandeR
schedule
29.10.2014