我有一个数据集,每行包含一个每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
答案 0 :(得分:0)
帮助事情更快地运转的一些提示:
不要随意构建data.frame,预先分配它。 newDf = data.frame(Date = rep(NA,count*6),Time=NA,X=NA,Y=NA,Z=NA)
将生成具有正确行数的data.frame。
矢量化是你的朋友。您不应该需要内部循环,因为您可以同时获得所有6个j
元素。 format(as.POSIXlt("2018-04-18")-0:5*60,"%H:%M:%S")
。因为R会回收值以使所有内容都长度相同,所以可以使用它来显着减少迭代次数。
如果您需要构建data.frame,请使用dplyr::bind_rows
或使用lapply
生成每批6个值,然后查看data.table::rbindlist
以进行改进性能