資料重新分組的例子很多,像是把年齡依五歲切成一個區間,或是將收入劃分為高中低組別。如果我們很明確的知道每組的界線在哪邊,當然可以直接寫語法分組,但是如果我沒辦法確定組別的界線呢?
今天實務上遇到的例子是北中南三區受訪者對於數百項產品的評分,除了總分之外,我還希望能得知個別區域的分數。像這樣人圍的評分因為非常主觀,所以我並沒有直接拿總分來分析,我只需要將分數由低至高分為五個等分來分析就好,這時候我們要做的動作:
1. 分別取得北中南三區20th、 40th、60th、 80th的百分位數
2. 分別依北中南三區的百分位數將各區分為五組
如果我們是用肉眼觀察跑出的資料結果,再手動KEY IN百分位數來分組,這樣就太累了。
所以我們偷懶使用小迴圈來幫我們完成:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
##讀入資料 | |
eva05 = read.csv(file = "201405_Clothes_data.csv", header=TRUE, sep=",") | |
##計算各區的百分位數,因為要分成五組,所以每20%分ㄧ組 | |
qx_north <- quantile(eva05$北區_均分, c(0, .2, .4, .6 ,.8, 1)) | |
qx_middle <- quantile(eva05$中區_均分, c(0, .2, .4, .6 ,.8, 1)) | |
qx_south <- quantile(eva05$南區_均分, c(0, .2, .4, .6 ,.8, 1)) | |
##建立新變項來儲存分組 | |
eva05$star_north <- 0 | |
eva05$star_middle <- 0 | |
eva05$star_south <- 0 | |
##分為五組,使用FOR迴圈來指定組別和臨界值 | |
for (i in 1:5){ | |
eva05$star_north[eva05$北區_均分 >= qx_north[[i]]] <- i | |
#####特別注意這邊使用的是[[]]雙括號,表示只取百分位數(是個LIST)的值 | |
} | |
for (i in 1:5){ | |
eva05$star_middle[eva05$中區_均分 >= qx_middle[[i]]] <- i | |
} | |
for (i in 1:5){ | |
eva05$star_south[eva05$南區_均分 >= qx_south[[i]]] <- i | |
} | |
##轉出 | |
write.csv(eva05, file = "evalution_201405.csv" , row.names= F) |
像這樣的技巧,在之前提到的RFM模型(將資料依RFM三個變項分為五等分)也會用到,算是個滿實用的小技巧
實驗室會採用k-means分組
回覆刪除分組方式很多啊~KMEAN主要是用來找相近族群的中心點,百分位數(或四分位數)比較像是算名次
回覆刪除