Hi:

Try this:

> d <- read.table(textConnection("
+          procedure property sensor_data              sensor_date
+ 1    S_10     nord    626821.0 2002-09-30T00:00:00+0200
+ 2     S_10     nord    626821.0 2002-12-05T00:00:00+0100
+ 3    S_10     nord    626821.1 2008-07-31T00:00:00+0200
+ 4  S_1000     nord    626496.8 2002-09-30T00:00:00+0200
+ 5  S_1000     nord    626496.8 2002-12-05T00:00:00+0100
+ 6  S_1000     nord    626496.9 2009-04-23T00:00:00+0200
+ 7  S_1000     nord    626497.0 2009-11-10T00:00:00+0100
+ 8     S_1     nord    626485.3 2002-09-30T00:00:00+0200
+ 9    S_1     nord    626485.3 2002-12-05T00:00:00+0100
+ 10    S_1     nord    626485.3 2003-02-07T00:00:00+0100"), header = TRUE)
# Create a new date variable - the HMS+ seem to be overkill here :)
d$sensor_date <- as.character(d$sensor_date)
d$stime <- as.Date(substring(d$sensor_date, 1, 10))

# Create a function to determine the minimum time and produce the
differences
# in sensor_data - works for a generic input data frame
> f <- function(df) {
+      mint <- which.min(df$stime)
+      df$difference <- with(df, sensor_data - sensor_data[mint])
#      df$stime <- NULL        # optional: knocks out the created date
variable
+      df
+     }

# Use the ddply() function in package plyr to map f to each subset data
frame
# defined by procedure:
> library(plyr)
> ddply(d, .(procedure), f)
   procedure property sensor_data              sensor_date      stime
difference
1        S_1     nord    626485.3 2002-09-30T00:00:00+0200 2002-09-30  0.0
2        S_1     nord    626485.3 2002-12-05T00:00:00+0100 2002-12-05  0.0
3        S_1     nord    626485.3 2003-02-07T00:00:00+0100 2003-02-07  0.0
4       S_10     nord    626821.0 2002-09-30T00:00:00+0200 2002-09-30  0.0
5       S_10     nord    626821.0 2002-12-05T00:00:00+0100 2002-12-05  0.0
6       S_10     nord    626821.1 2008-07-31T00:00:00+0200 2008-07-31  0.1
7     S_1000     nord    626496.8 2002-09-30T00:00:00+0200 2002-09-30  0.0
8     S_1000     nord    626496.8 2002-12-05T00:00:00+0100 2002-12-05  0.0
9     S_1000     nord    626496.9 2009-04-23T00:00:00+0200 2009-04-23  0.1
10    S_1000     nord    626497.0 2009-11-10T00:00:00+0100 2009-11-10  0.2

HTH,
Dennis

On Tue, Feb 1, 2011 at 1:52 AM, alcesgabbo <alcesga...@hotmail.com> wrote:

>
> Hello everybody.
>
> I have this object
>
>          procedure property sensor_data              sensor_date
> 1    S_10     nord    626821.0 2002-09-30T00:00:00+0200
> 2     S_10     nord    626821.0 2002-12-05T00:00:00+0100
> 3    S_10     nord    626821.1 2008-07-31T00:00:00+0200
> 4  S_1000     nord    626496.8 2002-09-30T00:00:00+0200
> 5  S_1000     nord    626496.8 2002-12-05T00:00:00+0100
> 6  S_1000     nord    626496.9 2009-04-23T00:00:00+0200
> 7  S_1000     nord    626497.0 2009-11-10T00:00:00+0100
> 8     S_1     nord    626485.3 2002-09-30T00:00:00+0200
> 9    S_1     nord    626485.3 2002-12-05T00:00:00+0100
> 10    S_1     nord    626485.3 2003-02-07T00:00:00+0100
>
> the third colomn (sensor_data) is a distance in meters.
> each distance has a date (sensor_date)
> for each row I would like to find the difference from the first distance
> (with the min date) and the distance.
>
> I know it's difficult to understand.. I give you an example:
>
> for the first procedure S_10 I should find the first distance based on the
> date:
>
> distance:    626821.0   with the date: 2002-09-30T00:00:00+0200
>
> then I should do the difference between the current distance and the first
> distance:
>
> 626821.0 - 626821.0 = 0.0
>  626821.0 -  626821.0 = 0.0
> 626821.1 - 626821.0 = 0.1
>
> Then I should do this also for the other procedures.
>
> I would like a resut like this:
>
>     procedure property sensor_data              sensor_date     difference
> 1    S_10     nord    626821.0 2002-09-30T00:00:00+0200    0.0
> 2     S_10     nord    626821.0 2002-12-05T00:00:00+0100   0.0
> 3    S_10     nord    626821.1 2008-07-31T00:00:00+0200   0.1
> 4  S_1000     nord    626496.8 2002-09-30T00:00:00+0200  0.0
> 5  S_1000     nord    626496.8 2002-12-05T00:00:00+0100   0.0
> 6  S_1000     nord    626496.9 2009-04-23T00:00:00+0200    0.1
> 7  S_1000     nord    626497.0 2009-11-10T00:00:00+0100   0.2
> 8     S_1     nord    626485.3 2002-09-30T00:00:00+0200     0.0
> 9    S_1     nord    626485.3 2002-12-05T00:00:00+0100      0.0
> 10    S_1     nord    626485.3 2003-02-07T00:00:00+0100     0.0
>
> How can I do this procedure?????
>
>
> Thanks
>
> --
> View this message in context:
> http://r.789695.n4.nabble.com/multi-Operations-on-a-matrix-tp3250807p3250807.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> 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.
>

        [[alternative HTML version deleted]]

______________________________________________
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