[問題] 依特定欄位的內容對data.table資料作分群

看板R_Language作者 (特務)時間8年前 (2017/03/05 22:11), 8年前編輯推噓0(003)
留言3則, 2人參與, 最新討論串1/2 (看更多)
- 問題: [問題類型]: 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) [軟體熟悉度]: 入門(寫過其他程式,只是對語法不熟悉) [問題敘述]: 手邊有一份資料 dt1 ,裡面有幾個欄位,以下節錄部分內容: Stop.No TravelTime Weekend 1 1   ↘ 2 1   → 當Stop.No==1, TravelTime介於[0,120],Weekend可能為True/False 3 1   ↗ ... 666 2   ↘ 667 2   → 當Stop.No==2, TravelTime介於[60,180],Weekend可能為True/False 668 2 ↗ ... 1315 3   ↘ 1316 3  → 當Stop.No==3,TravelTime介於[120,240],Weekend可能為True/False 1317 3  ↗ ... 2017 ========================================================================= ※1 共2017筆資料 ※2 Stop.No的資料為隨機1~3, 上面表列僅為示意用 並非正好[ 第1~665筆的Stop.No==1, 第666~1314筆==2, 第1315~2017筆==3] ========================================================================= 我想做的事情是依照 Stop.No/Weekend 欄位進行分群, 例: 這2017筆資料中有322筆資料 Stop.No==1 且 Weekend=T , 則將這322筆視為同一群,其餘依此類推,故應可得到6群 這邊參照之前板上前輩教導的方法將相同的 Stop.No 和 Weekend 取出作 group_by 程式碼架構如下(by dplyr): dt1 %>% group_by( Stop.No, Weekend ) %>% summarise( 對 group_by 出來的6群,作集群分析,詳如下述 ) ========================================================================= summarise() 的內容: 想把「上面 group_by 出來的結果(6群),每一群都再分成兩群(gr1/gr2)並找出中心」, 因此上網查了分群的方法,根據google,假設上述六群中的某群叫作 gr8, 則可透過以下程式碼將 gr8 分成兩群,並求出 gr8 的群集中心 kmeans.result = kmeans( gr8, 2) gr8_result <- gr8[, centers := kmeans.result$centers[kmeans.result$cluster] ] ========================================================================= 我想做的事情: 以本資料 dt1 為例, group_by 出來的 6群 應可透過kmeans求出 12個集群中心 ( gr8 裡面的 centers欄位 ) 最後將 gr8 的 centers 欄位內容加回 dt1 對應的2017筆資料列後面 以上敘述滿複雜的,若有敘述不清的地方歡迎提問,小弟將盡速補充 請求各位前輩們協助,先謝謝各位大大了 [程式範例]: [環境敘述]: [關鍵字]: -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.113.136.220 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1488723097.A.21F.html

03/05 22:41, , 1F
group_by + kmeans可以得到結果 再join回去就好
03/05 22:41, 1F

03/05 23:00, , 2F
對Stop.No,Weekend做group_by後每一組內的資料都是1-1
03/05 23:00, 2F

03/05 23:01, , 3F
這樣要再分成兩組是ok的嗎?
03/05 23:01, 3F
※ 編輯: joson4921 (1.161.169.236), 03/05/2017 23:22:06
文章代碼(AID): #1Ol1oP8V (R_Language)
文章代碼(AID): #1Ol1oP8V (R_Language)