Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 插入NA和x27;在时间间隔内_R_Plot_Time Series_Na - Fatal编程技术网

R 插入NA和x27;在时间间隔内

R 插入NA和x27;在时间间隔内,r,plot,time-series,na,R,Plot,Time Series,Na,我有一个时间序列数据集,我正试图绘制出来,但时间序列有很大的数据差距。在绘制此数据集时,R用一条直线绘制这些间隙,我希望最终的绘图不绘制这些数据间隙。我知道如何解决这个问题的唯一方法是在数据集中的间隙之间手动插入一行NA。为此,我编写了一个函数,在我的数据帧中循环。该函数可以工作,但运行速度非常慢 #Define Function to Insert NA in long stretches so don't plot line PlotSpace<-function(DF){ NR

我有一个时间序列数据集,我正试图绘制出来,但时间序列有很大的数据差距。在绘制此数据集时,R用一条直线绘制这些间隙,我希望最终的绘图不绘制这些数据间隙。我知道如何解决这个问题的唯一方法是在数据集中的间隙之间手动插入一行NA。为此,我编写了一个函数,在我的数据帧中循环。该函数可以工作,但运行速度非常慢

#Define Function to Insert NA in long stretches so don't plot line 

PlotSpace<-function(DF){

NROW<-nrow(DF)
for(t in seq(1:NROW)){

TimeDiff<-difftime(DF$TimeStamp[t+1], DF$TimeStamp[t], units = "hours") 
DF[t,"TimeDiff"]<-TimeDiff  

if( !is.na(TimeDiff) & TimeDiff > 5 ){

    NewTimeStamp<-DF$TimeStamp[t] + 1
    NewProfStamp<-DF$ProfStamp[t] + 1
    print(NewTimeStamp)
    DF<-rbind(DF,NA) #Add last row that is NA
    DF[nrow(DF),'TimeStamp']<-NewTimeStamp
    DF[nrow(DF),'ProfStamp']<-NewProfStamp




    }
}

DF <- DF[order(DF$TimeStamp),]
DF<-DF[-1,]
DF$TimeStamp<-as.POSIXct(DF$TimeStamp)

return(DF)

}

你可以用简单的方法做到。请分享你的数据的一个小的可复制的例子。不清楚你想要什么,因为你没有提供一些数据和你想要的输出使它可复制。请立即与我们共享可复制的数据,对此表示抱歉
 TimeStamp<-c("2015-05-01 10:00:00","2015-05-01 10:05:00","2015-05-01 10:10:00","2015-05-01 10:15:00",
"2015-05-01 10:20:00","2015-05-01 15:00:00","2015-05-01 15:05:00","2015-05-01 15:10:00"
,"2015-05-01 15:20:00","2015-05-01 15:30:00","2015-05-01 15:35:00")

Data<-c(1,2,3,4,5,3,7,8,9,2,11)

DF<-data.frame(TimeStamp, Data)

DF$TimeStamp<-as.POSIXct(DF$TimeStamp)

plot(DF$TimeStamp, DF$Data, type='l')
             TimeStamp Data
1  2015-05-01 10:00:00    1
2  2015-05-01 10:05:00    2
3  2015-05-01 10:10:00    3
4  2015-05-01 10:15:00    4
5  2015-05-01 10:20:00    5
   2015-05-01 10:21:00    NA
6  2015-05-01 15:00:00    3
7  2015-05-01 15:05:00    7
8  2015-05-01 15:10:00    8
9  2015-05-01 15:20:00    9
10 2015-05-01 15:30:00    2
11 2015-05-01 15:35:00   11
library(data.table)
setDT(DF)

# Create indicator for time gap
DF[, gap := c(diff(TimeStamp) > 2*60, F)]
# If there's a gap, add a new row
DF[, if(gap) rbind(.SD, .(TimeStamp = TimeStamp + 60), fill = T)
     else .SD
   , by = 1:nrow(DF)
   ][, -'gap']
#               TimeStamp Data
#  1: 2015-05-01 10:00:00    1
#  2: 2015-05-01 10:05:00    2
#  3: 2015-05-01 10:10:00    3
#  4: 2015-05-01 10:15:00    4
#  5: 2015-05-01 10:20:00    5
#  6: 2015-05-01 10:21:00   NA
#  7: 2015-05-01 15:00:00    3
#  8: 2015-05-01 15:05:00    7
#  9: 2015-05-01 15:10:00    8
# 10: 2015-05-01 15:20:00    9
# 11: 2015-05-01 15:30:00    2
# 12: 2015-05-01 15:35:00   11