R代码变慢了
我对R中的时间执行有问题,我做了以下操作来确定是否对类别重复了某些内容,并且对所有类别都有唯一的标识符。因此,数据如下所示:R代码变慢了,r,performance,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
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])
}
for(1中的i:nrow(表)){
Table$IDUNIQUE[Table$IDCAT[i]==Table$IDCAT]我相信您要做的是,为COUNTR
列的每一级IDCAT
找到最小值,并从中创建一列。函数ave
执行以下操作:
> with(Table, ave(COUNTR, IDCAT, FUN=min))
[1] 1 2 1 2 5 6 2
将此任务分配给表$IDUNIQUE
,以完成工作
这在复杂性上并不比您现有的低,但这项工作主要是在C代码中完成的,而不是在R中循环。因此,您正在尝试查找并标记重复列IDCAT
和CAT
中的值的行。您的性能问题是由于显式索引。如果您在functional m中使用矢量化操作再进一步,使用dplyr
或数据中的库和方法。table
甚至会进一步加速数据争论。请尝试写下规则,以确定行是唯一的。用这些信息编辑您的帖子。正如@Drey所说,向量是您的朋友e、 我也在想,你可能可以将帧标记为一个向量op,但我也从表中读到,如果它们具有相同的IDCAT
,那么你实际上只是将一行标记为IDUNIQUE
,我试着用dplyr函数来解决问题,但我没有实现解决问题,我不知道是否有人能解决这个问题如果你已经解决了这样的问题,如果你有明确的答案来回答我的问题,我会很有帮助的。