我有一个嵌套的for
循环,遍历称为data.frame
的80万多个观察值alltrx
中的每一行。它检查Posixct
中TIME
格式的列alltrx
中的每个值是否在由称为data.frame
的第二个long
中的值创建的日期间隔内。如果条件为真,则循环从“ {正确的”行中获取行号,该行的日期间隔是从long
获得的,并将其放入新的列alltrx$Survey
中。据我所知它正在运行,但是我尝试了一个进度条,并且在一小时内仅达到4%。我想问问是否有人对如何加快速度有想法?我还拥有alltrx
作为列表列表,其中数据在列表中进行了划分(以对我的项目有意义的方式)。
我看过this和this,但似乎并没有太多机会提高速度,因为第二点根本没有帮助...
....请参阅下面的代码
for (i in 1:nrow(alltrx)){
for (j in 1:nrow(long)) {
if(alltrx$TIME2[i] %within%
(interval(ymd(long$V2[j]), ymd(long$V1[j])))){alltrx$Survey[i]<-row.name(long[j])}
}
}
我对改善循环代码或其他可能具有更好性能的替代编码(例如lapply
)感兴趣,感谢您的所有帮助。我没有提供数据集,因为它似乎没有必要,但是如果有人指出拥有它的重要性,可以这样做。
答案 0 :(得分:0)
最后,通过将大型数据帧处理为一系列列表(我认为)可以一次进行多个过程,此过程大大加快了速度(与24小时相比,缩短了5分钟)。在涉及日期间隔的地方,fuzzyjoin::left_fuzzy_join()
有助于概述match_fun
参数允许您与在by
参数中选择的每个2个变量确定条件关系的条件。希望那里的人发现这个有趣甚至有用的:p
要完成以下示例,请参见我的脚本中正在运行的命令。注意:原始的alltrx
文件被分成data.frame
的{{1}}
alltrx.list