2017-07-18 57 views
0

是否有一個公式可以將範圍內的值標準化,以便它們的平均值等於範圍的中間值?將範圍內的值標準化

例如,如果我具有值

1,2,3,4,4,5 

(注意它們在1-5的範圍內),那麼我想調整,使每個值的平均值等於3(範圍的中間) 。

回答

2

您可以減去平均增加3:

select 3 + (t.x - avg(t.x) over()) 
from t; 

如果你特別想要的範圍的中間:

select (max(t.x) over() + min(t.x) over())/2 + (t.x - avg(t.x) over()) 
from t; 
+0

你應該改變'(最大值 - 最小值)/ 2'到'(最大+最小)/ 2'。 * dbfiddle [here](http://dbfiddle.uk/?rdbms=postgres_9.6&fiddle=ba98ced60fc6baee171ed5759d04961a)* – joanolo

+0

謝謝您,使用該公式,第一個值被調整爲.84,低於範圍的底部。有沒有辦法確保調整值仍在範圍內? –

+0

@NickBoutelier:不,那是數學。如果你移動的東西,以便你的平均水平是給定的,那麼他們就會根據需要移動。有更多的方法來標準化。 「正常」標準化稱爲*標準分數*,減去*平均值*(這稱爲「居中」)併除以*標準差*(這稱爲「減少」)。對於非高斯分佈,減去* min *併除以* range *是相當常見的。查看[Wikipedia](https://en.wikipedia.org/wiki/Normalization_(statistics)#Examples)以獲取更多示例。 – joanolo