作者Godkin (山里的人)
看板R_Language
标题[问题] 大笔data frame资料的处理
时间Thu Oct 8 17:15:26 2015
[问题类型]:
效能谘询(我想让R 跑更快)
[软体熟悉度]:
请把以下不需要的部份删除
使用者(已经有用R 做过不少作品)
[问题叙述]:
将data frame当中重复出现二次以上的资料抓出,并求取某个栏位的平均值
我有一个含有接近四百万比资料的data frame, 格式大概长这个样子
ID1 ID2 Name1 Name2 Value
-------------------------------------
m001 g001 mm1 gg1 0.5
m001 g001 mm1 gg1 0.6
m002 g001 mm2 gg1 0.3
m002 g002 mm2 gg2 0.5
m002 g002 mm2 gg2 0.7
m002 g002 mm2 gg2 0.2
m003 g002 mm3 gg2 0.1
.... .... .... ... ...
------------------------------------
我想把当中重复出现二次以上的资料抓出来,并计算value栏位的平均
使得资料变成下面这个样子
ID1 ID2 Name1 Name2 Value
-------------------------------------
m001 g001 mm1 gg1 0.55
m002 g002 mm2 gg2 0.47
.... .... .... .... ....
-------------------------------------
用过for loop + aggregate, foreach + doParallel以及用Rcpp写for loop
的方式去处理过,但是实在是相当慢,foreach+doParallel跟Rcpp for的版本
几乎都跑了接近快12小时, 不知道版上的各位大大有没有什麽好的建议?
[环境叙述]:
请提供 sessionInfo() 的输出结果,
里面含有所有你使用的作业系统、R 的版本和套件版本资讯,
让版友更容易找出错误
[关键字]:
data frame, subsetting
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.116.215.230
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1444295729.A.DD1.html
※ 编辑: Godkin (140.116.215.230), 10/08/2015 17:16:36
1F:→ celestialgod: 有试过直接dplyr吗 10/08 17:21
2F:→ celestialgod: dat %>% group_by(ID1, ID2, Name1, Name2) %>% 10/08 17:22
3F:→ celestialgod: summarise(value = mean(Value)) 10/08 17:22
4F:→ Godkin: 有,但就是卡了个要捞出出现两次以上的资料,还是跑挺久的 10/08 17:30
5F:→ Godkin: 现在用foreach+doParallel+aggregate+dplyr有比较快了 10/08 17:33
6F:推 celestialgod: summarise直接上length(value)做筛选就好啦 10/08 17:35
7F:→ celestialgod: 晚一点来测试速度 10/08 17:35
8F:推 celestialgod: 如果四百万列就要12小时,真的有点夸张 10/08 17:36
9F:→ Godkin: 没过用length XD, 等等来试试 10/08 17:36
10F:→ andrew43: 我直觉想到先把字串接起来变成新的栏再说... 10/08 18:10