【发布时间】:2016-09-02 14:12:04
【问题描述】:
我有一个包含大约 120 万行的长格式表格数据,格式如下
+-----------+-------+ |进程 ID |活动 | +-----------+-------+ | 111 |一个 | | 111 |乙| | 111 | C | | 111 | D | | 111 | E | | 112 |一个 | | 112 |乙| | 112 | D | | 112 | E | | 113 |一个 | | 113 |乙| | 113 | C | | 113 | D | | 113 | E | +-----------+-------+事件已经按它们的时间戳排序,我想将每个进程 ID 的进程流字符串从长格式表生成到另一个表的单独列中,如下所示
流程 B->C->D->E' , 'A->B->D->E' ,'A->B->C->D->E ' ,..等等)
我尝试了以下代码行。但在我的核心 i3、4GB RAM 笔记本电脑中,它们每个都需要将近 850 秒。有什么替代方法可以更快地做到这一点? 任何指导都会有所帮助
版本 1 使用 dplyr 包
state_flow_identifier <- function(x){
y <-filter(data_longformat,process_id==x)
y_v <- as.vector(y$Event)
as.character(paste(y_v,collapse = '->'))
}
processflow_detection <- mutate(processflow_detection,processflow = apply(processflow_detection['process_id'],1,function(x)state_flow_identifier(x)))
版本 2 使用 foreach 包
processflow <- foreach(i=processflow_detection$process_id,.combine='c') %do% state_flow_identifier(i)
谢谢。
【问题讨论】:
标签: r optimization foreach dplyr