2012-06-06 82 views
3

我在問這是一個關於R的通用/初學者問題,並非特定於我正在使用的軟件包。加快R計算的操作

我有一個dataframe與300萬行和15列。我不認爲這是一個巨大的數據框,但也許我錯了。

我正在運行下面的腳本,它已運行了2個半小時以上 - 我想我必須做些事情來加快速度。

代碼:

ddply(orders, .(ClientID), NumOrders=len(OrderID)) 

這不是一個過於密集的腳本,或再次,我不認爲它是。

在數據庫中,您可以向表中添加索引以提高聯接速度。在R中有沒有類似的操作我應該在導入時使功能/軟件包運行得更快?

+4

請參閱[data.table](http://cran.r-project.org/web/packages/data.table/)包。 –

+0

@JoshuaUlrich data.table而不是數據框?他們真的可以互換嗎?謝謝 – mikebmassey

+0

也來建議'data.table'。這個操作將會顯着加快,並且一旦將'data.frame'轉換爲'data.table',就可以運行相同的代碼。 '訂單< - data.table(訂單)'。那很簡單。 – Maiasaura

回答

2

,用建議的data.table包,下面的操作應該做的工作在一秒鐘內:

orders[,list(NumOrders=length(OrderID)),by=ClientID] 
1

好像所有代碼都已經這樣做是這樣的:

orders[order(orders$ClientID), ] 

這會更快。

3

看來,我認爲你可能想:(我不知道,LEN()函數存在)

orders$NumOrders <- with(orders(ave(OrderID , ClientID) , FUN=length))