第一届DF:
t.d
V1 V2 V3 V4
1 1 6 11 16
2 2 7 12 17
3 3 8 13 18
4 4 9 14 19
5 5 10 15 20
names(t.d) <- c("ID","A","B","C")
t.d$FinalTime <- c("7/30/2009 08:18:35","9/30/2009 19:18:35","11/30/2009 21:18:35","13/30/2009 20:18:35","15/30/2009 04:18:35")
t.d$InitTime <- c("6/30/2009 9:18:35","6/30/2009 9:18:35","6/30/2009 9:18:35","6/30/2009 9:18:35","6/30/2009 9:18:35")
>t.d
ID A B C FinalTime InitTime
1 1 6 11 16 7/30/2009 08:18:35 6/30/2009 9:18:35
2 2 7 12 17 9/30/2009 19:18:35 6/30/2009 9:18:35
3 3 8 13 18 11/30/2009 21:18:35 6/30/2009 9:18:35
4 4 9 14 19 13/30/2009 20:18:35 6/30/2009 9:18:35
5 5 10 15 20 15/30/2009 04:18:35 6/30/2009 9:18:35
第二届DF:
> s.d
F D E Time
1 10 19 28 6/30/2009 08:18:35
2 11 20 29 8/30/2009 19:18:35
3 12 21 30 9/30/2009 21:18:35
4 13 22 31 01/30/2009 20:18:35
5 14 23 32 10/30/2009 04:18:35
6 15 24 33 11/30/2009 04:18:35
7 16 25 34 12/30/2009 04:18:35
8 17 26 35 13/30/2009 04:18:35
9 18 27 36 15/30/2009 04:18:35
输出为:
从DF“t.d”我必须计算“FinalTime”和“InitTime”之间每一行的时间间隔(InitTime总是小于FinalTime)。
来自“sd”的另一个DF“temp”必须仅在上述时间间隔内形成数据,然后必须采用最新的“F”,“D”,“E”值并将其附加到计算时间间隔的“td”的“ith”行。
此外,我们必须查看新形成的DF“temp”是否具有以下条件:
这里'j'代表每行的值:
if(temp$F[j] < 35.5) + (temp$D[j] >= 100) >= 1)
{
temp$Flag <- 1
} else{
temp$Flag <- 0
}
最初我在数据帧中有300万行,每个DF有20列。
我使用“for循环”解决了上述问题,但由于行数很多,显然需要2到3天。
(如果我必须在每行上满足多个条件的情况下向结果DF添加新列?)
有人能提出不同的技巧吗?喜欢使用apply函数吗?
答案 0 :(得分:0)
我的建议是:
通过将'并行'包中的mclapply替换为lapply,您的代码将并行执行。
resultList <- lapply(1:nrow(t.d), function(i){
do stuff
if(condition){
return(df)
}else{
return(NULL)
}
resultDF <- do.call(rbind, resultList)