0

我有一个包含两列(Time,VA)的文件。该文件很大,我设法在 R 中读取它(使用读取和子集 - 对于大文件不实用)。现在,我想根据时间进行采样,其中每个样本都有样本大小和样本偏移。样本大小是整个采样过程的固定值,例如 sampleSize=10 秒。样本移位是每个新样本的起点(在第一个样本之后)。例如,如果 sampleShift =4 sec 并且 sampleSize 是 10 sec ,这意味着第二个样本将从 5 sec 开始并添加 10 sec 作为样本 sample size=10 sec。对于每个样本,我想将 -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值略小于移位值(显示在 的by=参数中seq)将为您提供不重叠的样本。或者,函数中的一个或两个标准可以从>=或更改<=><

于 2013-02-22T00:45:25.200 回答