R_Language 板


LINE

[问题类型]: 程式谘询(我想用R 做某件事情,但是我不知道要怎麽用R 写出来) [软体熟悉度]: 请把以下不需要的部份删除 入门(写过其他程式,只是对语法不熟悉) [问题叙述]: 大家好: 我有一个data table,其中有一个栏位叫做round,记录每次实验的数据 大概长这个样子: round y 1: 1 19.7 2: 1 7.86 3: 2 8.95 4: 2 10.07 5: 2 15.20 --- 10419: 3000 11.81 10420: 3000 8.46 10421: 3000 9.17 想要每 30 round分为一组,计算y的平均 也就是 round 1:30为一组,31:60为第二组...总共有100组 想像中用dplyr的做法应该是 mydt %>% group_by(...) %>% summarise(mean_y=mean(y)) 或是新增一个叫做group的栏位 mydt %>% mutate(group=[每30round为一组的写法]) %>% group_by(group) %>% summarise(mean_y=mean(y)) 可是就是卡在不知道group_by或是mutate里面不知道怎麽写比较恰当 感觉没有很难但实在不知道该从何做起,所以上来请教大家的想法 先谢谢大家了! [关键字]: group_by, data frame, 分组 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.160.8.213
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1487722475.A.974.html ※ 编辑: locka (118.160.8.213), 02/22/2017 08:18:42
1F:→ cywhale: mutate(grp=1+as.integer(round-1)/30) 02/22 08:51
抱歉我可能描述的不够清楚 我总共有3000个回合的资料,每个回合产生的y笔数为1-6笔不等 我想要做的是取第1到第30回合(round栏位为1到30者)当第1组 第31到60回合为第2组,第61到90回合为第3组...第2971-3000回合为第100组 去计算各组里面y的平均 所以预期结果是要产生"100笔"分组的平均资料 cywhale大大感谢您的回覆,我试过您的作法,可是结果还是不太对>"< 照您的做法产生的是3000笔平均(ie.每个回合内y的平均) ※ 编辑: locka (118.160.8.213), 02/22/2017 15:42:28 1600 update: hi,我现在试出一个做法如下: lapply(seq(1,3000,100),function(start){ end <- start+30 mydt <- filter(round %in% c(start,end)) %>% summarise(mean(y)) }) %>% unlist(use.names=F) 变成计算先要取的round是几到几,然後从原资料filter出来後计算平均, 最後再unlist 感觉有点蠢QQ 总觉得应该有data.table的写法 请大家指教>"< ※ 编辑: locka (118.160.8.213), 02/22/2017 16:10:37
2F:推 cywhale: 我觉得我说的没错?先产生group(如上回覆)再去组内平均 02/22 16:14
3F:→ cywhale: DT[,grp:=rp=1+as.integer(round-1)/30] %>% .[,mean(y), 02/22 16:15
4F:→ cywhale: by=grp] 就是做组内平均,dplyr用mutate接着根据grp平均 02/22 16:17
可是执行as.integer(round-1)/30 不是把round除30吗?(先不考虑前面的+1) 这样商会有0,0.033,0.066,1,1.33...一直到最後一个值是1 商只会越来越大, 总共会有3000组商 那这样这样的分组结果跟单纯用round分组是一样的不是吗? 我要的不是依照round分组 是想要每30 round分一组而且要照顺序 参考您的作法 我有试过as.integer(round-1)%%100 用取余数的方法分成100组 可是这样的话就会变成第一组是(1,101,201,301,...2901)这些回合的平均 第二组是(2,201,202,302...2902)... 虽然每组也是30个round但不是我想要的(1,2,3...30),(31,32,33,34..60), (2971,2972,2973,...3000)... ※ 编辑: locka (118.160.8.213), 02/22/2017 16:32:25
5F:推 cywhale: 我没注意到我括号打错位置..1+as.integer((round-1)/30) 02/22 17:20
噢噢!!我看懂了!!无条件舍弃小数点,直接依照整数部分来分组 这方法要学起来...(笔记) 那这样就没错了,十分感谢cywhale大大,thanks!! ※ 编辑: locka (118.160.8.213), 02/22/2017 17:55:19
6F:→ celestialgod: findInterval(1:3000, seq(1, 3000, by = 30)) 02/22 20:08
7F:→ celestialgod: 分群可以用上面指令 02/22 20:08
8F:→ likuyun: 先建立分群序列seq_group<-seq(0,100,by=1)*30+1 02/24 22:15
9F:→ likuyun: cut(round,seq_group,seq_group[1:(length(seq_group)-1) 02/24 22:17
10F:→ likuyun: ]) 02/24 22:17
11F:→ likuyun: 跑出来的向量就是分群好的结果,1~30会给1、31~60会给31 02/24 22:20







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Tech_Job站内搜寻

TOP