作者joson4921 (特务)
看板R_Language
标题[问题] 依特定栏位的内容对data.table资料作分群
时间Sun Mar 5 22:11:31 2017
- 问题:
[问题类型]:
程式谘询(我想用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://webptt.com/cn.aspx?n=bbs/R_Language/M.1488723097.A.21F.html
1F:→ celestialgod: group_by + kmeans可以得到结果 再join回去就好 03/05 22:41
2F:→ carl090105: 对Stop.No,Weekend做group_by後每一组内的资料都是1-1 03/05 23:00
3F:→ carl090105: 这样要再分成两组是ok的吗? 03/05 23:01
※ 编辑: joson4921 (1.161.169.236), 03/05/2017 23:22:06