2012-06-06 53 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))