我有一个包含两列(Time,VA)的文件。文件很大,我设法在R中读取它(使用读取和子集 - 不适用于大文件)。现在,我想根据时间进行采样,每个样本都有样本大小和样本移位。样本大小是整个采样过程的固定值,例如sampleSize = 10秒。样品移位是每个新样品的起点(在第一个样品之后)。例如,如果sampleShift = 4秒且sampleSize为10秒,则意味着第二个样本将从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)我试图根据行号而不是时间值进行采样。此外,每个样本的转变为一个。
文件样本:
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
.............
有什么更专业的建议吗?
答案 0 :(得分: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=
的{{1}}参数中)会给你非重叠的样本。或者,可以将函数中的一个或两个标准从seq
或>=
更改为<=
或>
。