【问题标题】:Actions to speed up R calculations加快 R 计算的措施
【发布时间】:2012-06-06 00:26:54
【问题描述】:

我是作为关于 R 的一般/初学者问题提出的,而不是针对我使用的包。

我有一个dataframe,有 300 万行和 15 列。我不认为这是一个巨大的数据框,但也许我错了。

我正在运行以下脚本,它已经运行了 2 个多小时 - 我想我必须采取一些措施来加快速度。

代码:

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

这不是一个过于密集的脚本,或者我不认为它是。

在数据库中,您可以为表添加索引以提高连接速度。 R 中是否有类似的操作我应该在导入时执行以使函数/包运行得更快?

【问题讨论】:

  • 查看data.table 包。
  • @JoshuaUlrich data.table 而不是数据框?它们真的可以互换吗?谢谢
  • 也进来推荐data.table。此操作将明显更快,并且您可以在将 data.frame 转换为 data.table 后运行相同的代码。 orders <- data.table(orders)。就这么简单。
  • 只是解释一下,plyr 因其非常甜美的语法糖而非常受欢迎,但对于大型数据集来说速度很慢,特别是当你的分裂变量很大。花一些时间学习data.table;语法不是很好(恕我直言),但它通常会快很多数量级。
  • 听起来table(orders$ClientID) 可能也会得到你想要的。

标签: r plyr data.table


【解决方案1】:

在我看来你可能想要:

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

(我不知道存在 len() 函数。)

【讨论】:

    【解决方案2】:

    使用建议的data.table 包,以下操作应该在一秒钟内完成工作:

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

    【讨论】:

      【解决方案3】:

      看起来你的所有代码都是这样的:

      orders[order(orders$ClientID), ]
      

      这样会更快。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多