缓慢执行嵌套循环

时间:2018-04-16 14:52:43

标签: r dataframe

我有一个数据集,每行包含一个每6分钟的值。我试图以1分钟的时差复制每一行。

代码有效但执行速度很慢。

 colnames(newDf)<- names(file)
    count <- nrow(file)

    for( i in 1:count)
    {
    for(j in 0:5)
    {
     vec <- file[i,]
     vec[[2]]<-as.character(format(time[i]-j*60, "%H:%M:%S"))
     newDf[nrow(newDf) + 1,] = vec
    }
    }

Sample input
Date    Time    X   Y   Z   
4/15/2017   23:54:00    -0.03   

Expected output

4/15/2017   23:54:00    -0.03   
4/15/2017   23:53:00    -0.03   
4/15/2017   23:52:00    -0.03   
4/15/2017   23:51:00    -0.03   
4/15/2017   23:50:00    -0.03
4/15/2017   23:49:00    -0.03   

1 个答案:

答案 0 :(得分:0)

帮助事情更快地运转的一些提示:

  1. 不要随意构建data.frame,预先分配它。 newDf = data.frame(Date = rep(NA,count*6),Time=NA,X=NA,Y=NA,Z=NA)将生成具有正确行数的data.frame。

  2. 矢量化是你的朋友。您不应该需要内部循环,因为您可以同时获得所有6个j元素。 format(as.POSIXlt("2018-04-18")-0:5*60,"%H:%M:%S")。因为R会回收值以使所有内容都长度相同,所以可以使用它来显着减少迭代次数。

  3. 如果您需要构建data.frame,请使用dplyr::bind_rows或使用lapply生成每批6个值,然后查看data.table::rbindlist以进行改进性能