【发布时间】:2020-01-29 03:54:56
【问题描述】:
我正在使用 for 循环。 for 循环的目标是简单地测试一个条件并对数据进行适当的编码。该循环必须迭代超过 503,288 个唯一值并包括三个 if 语句。有没有办法加快 for 循环?
代码如下:
count<- 0
for(i in unique(Data$ID)){ #503288
#Subset Relevant Data
Loop_Before<- subset(Primary_Before, ID == i); Loop_After <- subset(Primary_After, ID == i)
if(nrow(Loop_Before) >= 1 & nrow(Loop_After) >= 1){
Data$Status[Data$ID == i] <- "Both Elections"
}
if(nrow(Loop_Before) >= 1 & nrow(Loop_After) == 0){
Data$Status[Data$ID == i] <- "Only Primary Election"
}
if(nrow(Loop_Before) >= 0 & nrow(Loop_After) == 1){
Data$Status[Data$ID == i] <- "Only General Election"
}
message(count<- count +1)
}
table(Data$Status)
感谢您的帮助!
【问题讨论】:
-
不知道
Primary_Before和Primary_After是如何形成的,或者它们与Data的关系如何。几乎肯定有一种方法可以做到这一点,它不涉及循环的每个步骤的多个过滤器和全帧复制。完整的副本。每一步。如果您想要一个有意义的答案,我建议您通过提供Data(以及其他,视情况而定)的代表性样本来使这个问题可重现,最好使用data.frame(...)或dput(head(Data,10))之类的东西(具有不同的数据)。
标签: r performance for-loop parallel-processing