我在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分钟,我不知道为什么它是这么慢,有人可以帮我解决这个问题吗?或者有人知道是否有某些功能或功能可以使代码更快?
答案 0 :(得分:0)
我相信您尝试做的事情是为COUNTR
的每个级别找到IDCAT
列的最小值,并从中创建一个列。函数ave
执行此操作:
> with(Table, ave(COUNTR, IDCAT, FUN=min))
[1] 1 2 1 2 5 6 2
将此内容分配给Table$IDUNIQUE
以完成工作。
这并不比你的复杂程度低,但是工作主要是用C代码完成的,而不是在R中循环。