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中高效地重新采样数据(线性外推)_R_Time_Dataframe_Sampling_Resampling - Fatal编程技术网

在R中高效地重新采样数据(线性外推)

在R中高效地重新采样数据(线性外推),r,time,dataframe,sampling,resampling,R,Time,Dataframe,Sampling,Resampling,我以1秒的间隔记录了一组观测结果(伽马和时间)。我想在0.1秒时重新采样这些数据。数据如下所示: 38804.96 12.59222222 38805.12 12.5925 38805.38 12.59277778 38805.4 12.59305556 38805.27 12.59333333 38805.36 12.59361111 38805.33 12.59388889 38805.23 12.59416667 38805.3 1

我以1秒的间隔记录了一组观测结果(伽马和时间)。我想在0.1秒时重新采样这些数据。数据如下所示:

38804.96    12.59222222
38805.12    12.5925
38805.38    12.59277778
38805.4     12.59305556
38805.27    12.59333333
38805.36    12.59361111
38805.33    12.59388889
38805.23    12.59416667
38805.3     12.59444444
38805.18    12.59472222
38805.21    12.595
38805.28    12.59527778
我提出了以下代码来对伽马进行重新采样(线性外推),但这非常耗时,因为我的数据集有30000多个观测值

    #Resampling la diurnal drift
    j <- (0:9)
    A <- 0
    VectorT <- numeric()
    VectorG <- numeric()
    for (I in 1:nrow(R20140811)){ 
       # Calculate the increment of time
       Rate <- (R20140811[I+1,2]- R20140811[I,2])/10
       Time <- R20140811[I,2]
       # Calculate the increment of gamma
       nT <- (R20140811[I+1,1] - R20140811[I,1])/10
       Gamma <- R20140811[I,1]
       print(I)
       for (j in 0:9){ 
          A <- A + 1
          VectorT[A] <- Time + (j*Rate)
          VectorG[A] <- Gamma + (j*nT)
          R20140811[A,3] <- VectorG[A]
          R20140811[A,4] <- VectorT[A]
       }
    }
#日漂移重采样

j你需要对你的计算进行矢量化

考虑到您的矩阵:

R20140811 <- matrix(
c(38804.96   ,12.59222222,
38805.12   ,12.5925    ,
38805.38   ,12.59277778,
38805.4    ,12.59305556,
38805.27   ,12.59333333,
38805.36   ,12.59361111,
38805.33   ,12.59388889,
38805.23   ,12.59416667,
38805.3    ,12.59444444,
38805.18   ,12.59472222,
38805.21   ,12.595     ,
38805.28   ,12.59527778),ncol=2,byrow=TRUE)

R20140811我写它的方式浪费了很多时间。。。你的效率太高了。非常感谢你的回答,不客气。记住,“向上投票”一个答案或问题是表达感谢的正常方式,所以:-)
times <- R20140811[,2]
gammas <- R20140811[,1]
# given a vector vect, extrapole nInt points between points
Extrapol <- function(vect,nInt){
        # the starting points of your intervals
        zeros <- vect[1:(length (vect)-1)]
        # determine the increments
        increments <- (vect[2:length (vect)]-zeros)/nInt
        # get the new sample
        newSample <- rep(zeros[1: (length (times)-1)],each=10) + as.vector(outer (0:9,increments))
        return(newSample)
}
newSampleGamma <- Extrapol(gammas,10)
newSampleTimes <- Extrapol(times,10)