我正在尝试使用R中的循环扫描数据集,以查看数据子集中的数据点是否满足某些规则,此处粘贴了一个示例:
loop.ward <- 1
loop.control.chart <- 1
while (loop.ward <= length(unique(control.chart[,"ward"])))
{
loop.weekly.count <- 3
while (loop.weekly.count <= nrow(control.chart[control.chart[,"ward"]==unique(control.chart[,"ward"])[loop.ward] ,]))
{
temp <- control.chart[control.chart[,"ward"]==unique(control.chart[,"ward"])[loop.ward] ,][(loop.weekly.count-2):(loop.weekly.count),]
if (nrow(temp[temp["UWL.out"]==1,])>=2 | nrow(temp[temp["LWL.out"]==1,])>=2)
{
control.chart[control.chart[,"ward"]==unique(control.chart[,"ward"])[loop.ward],][(loop.weekly.count),"rules.violated"] <- 2
}
loop.control.chart <- loop.control.chart + 1
loop.weekly.count <- loop.weekly.count + 1
}
loop.ward <- loop.ward + 1
}
代码正在做我需要的东西,但速度非常慢(我所有病房共有大约7000个数据点(即max(loop.control.chart)= 7000),还有4条扫描规则,我花了10分钟完成了一轮。
我无法想到优化它(我想过tapply,但不知道如何实现它),有什么建议吗?
谢谢!
(还有一个微不足道的问题,这里的代码可读吗?)
更新
部分数据附有here供您参考。
答案 0 :(得分:1)
你能提供一份数据样本吗?很难将结构与你给出的结构相提并论。我认为plyr可能会有所帮助,但如果没有示例数据,我就不会那么具体。
代码不可读。我明白你在做什么,但它似乎不必要地冗长。它也会出现在你所做的一些事情上,有点被黑客攻击,特别是if条件。还有相当多的重复代码。
我并不是说要严厉,因为我确信代码从你的观点来看是完全合理的。也许它在示例数据中看起来更清晰。