Look at these functions. They should give you the building blocks you need:

?diff   # returns a vector of length n-1
#it would be a logical vector if wrapped in the appropriate functions
     #needs to be padded to line up with dataframes

?rle    # returns a list with the lengths and values of the repeats
        # will work on logical vectors

If your data is in a dataframe, snowdepth, with column names time and depth, then this might create a difference column in that dataframe:

snowdepth$incr <- c(0, diff(snowdepth$depth))

And this might give you the be a noise marker:

snowdepth$noise <- c(FALSE, diff(snowdepth$depth) > x)

You should also look at the function dput so you can offer reproducible code and data with further questions.

--
David Winsemius

On Mar 5, 2009, at 3:46 AM, Kara Przeczek wrote:

I am fairly new to R and I would like to do the following, but do not know where to start. Any help or direction would be appreciated. I have a time series of snow depth measurements. I would like to determine the depth of snowfall for each snowfall event. There is noise in the data so I only want to add data values if the subsequent depth is greater than the previous by a certain margin. I am only interested in calculating snow accumulation events.
Example data:

Time     depth  
1        84.3   
2        84.5   
3        86     
4        86.1   
5        85.8   
6        86.7   
7        87.9   
8        89.1   
9        90     
10       89     
11       88     
12       88     
13       89.1   
14       90     
15       91.2   
16       89.9   
...      ...    
I would like to create a second data frame from the data that looks something like this:

Event    InitialDepth    FinalDepth      Accumulation    InitialTime     
FinalTime      
1        84.3    90      5.7     1       9      
2        88      91.2    3.2     11      15     
...                                             

I would like to write a program that progresses through the depth column, point by point, to test if (i+1) - i > x. (where I will set x to exlude the noise in the data). As long as i+1 is greater than or equal to i, then the initial depth stays at the first data point and the final value changes to that in i+n. Once the test is false, this indicates the end of the event, the accumulation is calculated, all values are saved as event X and a new event is started. I tried using ifelse(), but I do not know how to move through the data and then save the initial and final values and time stamps in another table.

Thank you very much for your time.

Kara





______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to