R代码变慢了

时间:2017-03-17 19:16:47

标签: r performance

我在R中执行时间有问题,我做了以下操作来确定是否为类别重复了某些事情,并且具有所有类别的唯一标识符。所以数据看起来像:

CAT       IDCAT     COUNTR    IDUNIQUE
categ1    fffss     1         1
categ2    ffaab     2         2
categ3    fffss     3         1
categ1    ffaab     4         2
categ3    mmmaa     5         5
categ2    aaamm     6         6
categ3    ffaab     7         2

我使用的代码是:

for(i in 1:nrow(Table)){
  Table$IDUNIQUE[Table$IDCAT[i]==Table$IDCAT]<-min(Table$COUNTR[Table$IDCAT[i]==Table$IDCAT])
}

规则只是识别CAT重复的IDCAT,以便为所有CAT提供唯一ID,如果IDCAT在CAT中重复,那么IDUNIQUE它将具有IDCAT相等的相同值。 我有大约1,200,000个寄存器,因此,当我运行代码为20,000寄存器时,执行时间约为15分钟,现在我运行代码并且100个寄存器的时间是9分钟,我不知道为什么它是这么慢,有人可以帮我解决这个问题吗?或者有人知道是否有某些功能或功能可以使代码更快?

1 个答案:

答案 0 :(得分:0)

我相信您尝试做的事情是为COUNTR的每个级别找到IDCAT列的最小值,并从中创建一个列。函数ave执行此操作:

> with(Table, ave(COUNTR, IDCAT, FUN=min))
[1] 1 2 1 2 5 6 2

将此内容分配给Table$IDUNIQUE以完成工作。

这并不比你的复杂程度低,但是工作主要是用C代码完成的,而不是在R中循环。