0

2 つの列 (Time 、VA) を含むファイルがあります。ファイルは大きく、Rで読み取ることができました(読み取りとサブセットを使用-大きなファイルには実用的ではありません)。ここで、各サンプルにサンプル サイズとサンプル シフトがある時間に基づいてサンプリングを行いたいと考えています。サンプル サイズは、サンプリングのプロセス全体で固定値です。たとえば、sampleSize=10 秒です。サンプル シフトは、各新しいサンプルの開始点です (最初のサンプルの後)。たとえば、 sampleShift =4 秒で sampleSize が 10 秒の場合、2 番目のサンプルは 5 秒から開始し、サンプルのサンプル サイズ = 10 秒として 10 秒を追加することを意味します。サンプルごとに、-VA-値を関数に渡して計算します。

Sampling <- function(values){
# Perform the sampling 
lastRowNumber<- #specify the last row manually
sampleSize<-10
lastValueInFile<-lastRowNumber-sampleSize

for (i in 1: (lastValueInFile ) ){ 
  EndOfShift<-9+i
  sample<-c(1:sampleSize)
  h<-1

  for(j in i:EndOfShift){        
    sample[h] <- values[j,1]
    h<-h+1
  }
  print(sample)
  #Perform the Calculation on the extracted sample
  #--Samp_Calculation<-SomFunctionDoCalculation(sample) 
}
}

私の試行の問題は次のとおりです。1)読み取ったファイルごとに手動で lastRow 番号を指定する必要があります。2)時間値ではなく行数に基づいてサンプリングを行おうとしていました。また、シフトはサンプルごとに 1 ずつでした。

ファイルのサンプル:

Time     VA
0.00000 1.000
0.12026 2.000
0.13026 2.000
0.14026 2.000
0.14371 3.000
0.14538 4.000
 ..........
 ..........
15.51805 79.002
15.51971 79.015
15.52138 79.028
15.52304 79.040
15.52470 79.053
.............

より専門的な方法について何か提案はありますか?

4

1 に答える 1

1

次のようにいくつかのテストデータを生成しました。

val <- data.frame (time=seq(from=0,to=15,by=0.01),VA=c(0:1500))

...次に関数:

sampTime <- function (values,sampTimeLen) 
{
    # return a data frame for a random sample of the data frame -values-
    # of length -sampTimeLen-
    minTime <- values$time[1]
    maxTime <- values$time[length(values$time)] - sampTimeLen
    startTime <- runif(1,minTime,maxTime)
    values[(values$time >= startTime) & (values$time <= (startTime+sampTimeLen)),]
}

...次のように使用できます。

> sampTime(val,0.05)
    time  VA
857 8.56 856
858 8.57 857
859 8.58 858
860 8.59 859
861 8.60 860

...あなたが探していたものだと思います。

(編集)

ランダムな時間ではなく特定の時間からのサンプルが必要であるという明確化に続いて、この関数は次のことを提供するはずです。

sampTimeFrom <- function (values,sampTimeLen,startTime) 
{
    # return a data frame for sample of the data frame -values-
    # of length -sampTimeLen- from a specific -startTime-
    values[(values$time >= startTime) & (values$time <= (startTime+sampTimeLen)),]
}

...これは:

> sampTimeFrom(val,0.05,0)
  time VA
1 0.00  0
2 0.01  1
3 0.02  2
4 0.03  3
5 0.04  4
6 0.05  5
> sampTimeFrom(val,0.05,0.05)
   time VA
6  0.05  5
7  0.06  6
8  0.07  7
9  0.08  8
10 0.09  9
11 0.10 10

sapply()複数のサンプルが必要な場合は、次のように配信できます。

> samples <- sapply(seq(from=0,to=0.15,by=0.05),function (x) sampTimeFrom(val,0.05,x))
> samples[,1]
$time
[1] 0.00 0.01 0.02 0.03 0.04 0.05

$VA
[1] 0 1 2 3 4 5

この場合、出力はオーバーラップしますが、シフト値(のパラメーターにsampTimeLen表示されます)よりもわずかに小さくすると、オーバーラップしないサンプルが得られます。または、関数の基準の1つまたは両方をまたはからまたはに変更することもできます。by=seq>=<=><

于 2013-02-22T00:45:25.200 に答える