2015-07-04 40 views
0

假设我有一个非常大的数据框,有2列和0.5 mil的行。 例如,几行可能是这样的:R解析大数据帧 - 速度优化

# Start End 
# 89  100 
# 93  120 
# 95  125 
# 101  NA 
# 115  NA 
# 123  NA 
# 124  NA 

我想这个数据帧处理,输出看起来 像这样的数据帧:

# End  Start 
# 100  89, 93, 95 
# 120  101, 115 
# 125  123, 124 

什么是绝对的考虑到有 .5万行,最快的方法来做到这一点? bgoldst提出了这段令人敬畏的代码:

# m is a large two column data frame 
end <- na.omit(m[,'V2']); 
out <- data.frame(End=end, 
Start=unname(sapply(split(m[,'V1'],findInterval(m[,'V1'],end [as.character(0:c(length(end)-1))],paste,collapse='.'))) 

但是这需要一点点时间。

感谢您的帮助!

可能的重复帖子的答案没有解决时间问题。 bgoldst的答案产生了期望的结果,但在我的电脑上很慢。我想知道是否还有更多的事情可以做,让这个运行更快。

+0

上可能重复后这些问题的答案并没有解决问题的时间。 – ALKI

+0

请考虑使用类似于C/C++的东西。 – user1436187

+0

这是'结束< - na.omit(m [,'V2']);'慢? – user1436187

回答

1

与data.table的溶液可以更快:

library(data.table) 
dt = setDT(df)[, id:=findInterval(Start, End[!is.na(End)])][,paste(Start,collapse=','),id] 

result = data.frame(End = df$End[!is.na(df$End)],Start = dt$V1) 
# End Start 
#1 100 89,93,95 
#2 120 101,115 
#3 125  123 
+0

这花费的时间与数据帧大致相同 – ALKI