I have files containing data set which contain 11,000 rows. I have to run a loop through each row, this is taking me 25minutes for each file. I am using following code:
z <- read.zoo("Title.txt", tz = "")
for(i in seq_along(z[,1])) {
if(is.na(coredata(z[i,1]))) next
ctr <- i
while(ctr < length(z[,1])) {
if(abs(coredata(z[i,1])-coredata(z[ctr+1,1])) > std_d) {
z[ctr+1,1] <- NA
ctr <- ctr + 1
} else {
break
}
}
}
Where "Title.txt"
is file containing 11,000 rows. It looks like (first five rows):
"timestamp" "mesured_distance" "IFC_Code" "from_sensor_to_river_bottom"
"1" "2012-06-03 12:30:07-05" 3188 1005 3500
"2" "2012-06-03 12:15:16-05" 3189 1005 3500
"3" "2012-06-03 12:00:08-05" 3185 1005 3500
"4" "2012-06-03 11:45:11-05" 3191 1005 3500
"5" "2012-06-03 11:30:15-05" 3188 1005 3500
I wish to receive help on how should I increase the speed for this code?
Here is how the code works:
set.seed(100)
x=rnorm(15)
std_d=sd(x)
afer running code. It gives this:
m
[1] -0.50219235 NA -0.07891709 NA 0.11697127 0.31863009 NA
[8] 0.71453271 NA NA NA NA NA 0.73984050
[15] NA
It replaces the next element(e2) with NA if the subtraction(e1-e2) is > std_d and then checks e1 with e3 if (e1-e3) is > std_d then it replaces e3, if it was < std_d then it would check e3-e4 and so on.
coredata
an array lookup or a function call? \$\endgroup\$[.zoo
orcoredata
: if it is the case, extracting the array once before the loop may speed things up. \$\endgroup\$