2015-07-04 38 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