【发布时间】:2020-06-07 01:41:24
【问题描述】:
for (i in 1:nrow(surgeries_7)){
count = 0
for (j in 1:nrow(visits_1)){
count <- ifelse(surgeries_7$PatientProfileId[i]==visits_1$PatientProfileId[j]
& visits_1$visit_date[j] > surgeries_7$surgery_date[i] &
visits_1$visit_date[j] <= surgeries_7$one_year_from_surgery[i],1,0)
surgeries_7$post_op_visits[i] <- surgeries_7$post_op_visits[i] + count
}
print(i)
}
有两个表:surgical_7 是一个:它有两列,PatientProfileId(unique),我们有每个相应配置文件 ID 的手术日期。
第二个表是访问表,其中我们有不同访问的个人资料 ID(相同个人资料 ID 的多个条目)。
我们正在尝试计算手术日期之后(存在于 Surgery_7 表中)但在手术日期后一年内访问表中的访问次数(每个配置文件 id 的条目)。
问题是代码运行大约 6k 行花费的时间太长。有什么方法可以让循环更快?
【问题讨论】:
-
请提供一个可重现的示例,包括一些示例数据和所需的输出。通常,如果您不先设置在 for 循环之前填充的对象,则 for 循环会很慢。
-
您可以使用
dplyr包来避免循环。首先,您可以使用left_join之类的内容连接两个表,然后使用group_by、filter和count获得所需的输出。
标签: r performance loops for-loop nested