Simpler:

dat1$adj_mean <-  within(dat1, ave(mean, point, FUN = function(x)x-x[1]))

ave() is a very handy function for this sort of thing.
within()  saves typing.

-- Bert

On Sat, Jun 30, 2012 at 4:16 PM, arun <smartpink111@yahoo.com> wrote:

> HI,
>
> Try this:
> #dat1: data
>
> dat2<-split(dat1,dat1$point)
> adjmeanlist<-lapply(dat2,function(x)x[,3]-x[,3][1])
> dat3<-data.frame(dat1,adjmean=unlist(adjmeanlist))
>  head(dat3)
>   point time     mean        sd  adjmean
> 1     1    1 52.50100 1.5073927 0.000000
> 3     1    2 54.50182 0.8510329 2.000818
> 4     1    3 56.60174 1.5787222 4.100739
> 5     1    4 57.20000 1.2292726 4.699000
> 6     1    5 59.30000 2.2632327 6.799000
> 7     1    6 57.80089 1.4745218 5.299893
>
>
>
> A.K.
>
>
>
> ----- Original Message -----
> From: Kristiina Hurme <kristiina.hurme@uconn.edu>
> To: r-help@r-project.org
> Cc:
> Sent: Saturday, June 30, 2012 5:21 PM
> Subject: [R] How to adjust the start of a series to zero? (i.e. subtract
> the first value from the sequence)
>
> Hello,
> I'd have a time series, where I am plotting the means and sd of a distance
> for a variety of positions along a bird's bill. I'd like to set each line
> (represented by "point") to start at zero, so that I can look at the
> absolute change along the series. At the moment I only know how to do that
> in Excel, by subtracting the value of time 1, point 1 from all other times
> for point 1. My actual data set has many points ( 20 per bird, only 3 shown
> here), so I would love to make this faster in R. Ideally, I would have
> another column titled "adj_mean" for the adjusted means.
>
> Here is an example.
>
> > sort2v4
>     point time      mean        sd
> 1       1    1 52.501000 1.5073927
> 3       1    2 54.501818 0.8510329
> 4       1    3 56.601739 1.5787222
> 5       1    4 57.200000 1.2292726
> 6       1    5 59.300000 2.2632327
> 7       1    6 57.800893 1.4745218
> 8       1    7 55.303508 2.2661855
> 9       1    8 51.100943 1.8540025
> 10      1    9 50.600000 1.7126977
> 2       1   10 52.904716 1.1010460
> 111     2    1 50.605963 1.2633969
> 113     2    2 52.203828 0.7890765
> 114     2    3 54.100909 1.1013344
> 115     2    4 55.000000 1.1547005
> 116     2    5 57.001725 1.6341500
> 117     2    6 55.003591 1.5652438
> 118     2    7 52.911089 1.7373914
> 119     2    8 49.204022 1.0350809
> 120     2    9 48.904103 0.8747568
> 112     2   10 50.915700 0.8765483
> 131     3    1 48.608228 0.8433913
> 133     3    2 49.307101 0.4827703
> 134     3    3 51.310824 0.9424023
> 135     3    4 52.413350 0.6997860
> 136     3    5 54.116723 1.1927297
> 137     3    6 52.618161 1.1686288
> 138     3    7 49.822764 1.6303473
> 139     3    8 47.107336 1.2013356
> 140     3    9 47.104214 1.1986148
> 132     3   10 48.719484 0.6765047
>
> and I would like it to look like this... (which I did in Excel). The start
> of each time 1-10 has an adj_mean of 0.
> > sort2v4
>     point    time    mean    sd    adj_mean
> 1    1    1    52.501    1.5073927    0
> 3    1    2    54.501818    0.8510329    2.000818
> 4    1    3    56.601739    1.5787222    4.100739
> 5    1    4    57.2    1.2292726    4.699
> 6    1    5    59.3    2.2632327    6.799
> 7    1    6    57.800893    1.4745218    5.299893
> 8    1    7    55.303508    2.2661855    2.802508
> 9    1    8    51.100943    1.8540025    -1.400057
> 10    1    9    50.6    1.7126977    -1.901
> 2    1    10    52.904716    1.101046    0.403716
> 111    2    1    50.605963    1.2633969    0
> 113    2    2    52.203828    0.7890765    1.597865
> 114    2    3    54.100909    1.1013344    3.494946
> 115    2    4    55    1.1547005    4.394037
> 116    2    5    57.001725    1.63415    6.395762
> 117    2    6    55.003591    1.5652438    4.397628
> 118    2    7    52.911089    1.7373914    2.305126
> 119    2    8    49.204022    1.0350809    -1.401941
> 120    2    9    48.904103    0.8747568    -1.70186
> 112    2    10    50.9157    0.8765483    0.309737
> 131    3    1    48.608228    0.8433913    0
> 133    3    2    49.307101    0.4827703    0.698873
> 134    3    3    51.310824    0.9424023    2.702596
> 135    3    4    52.41335    0.699786    3.805122
> 136    3    5    54.116723    1.1927297    5.508495
> 137    3    6    52.618161    1.1686288    4.009933
> 138    3    7    49.822764    1.6303473    1.214536
> 139    3    8    47.107336    1.2013356    -1.500892
> 140    3    9    47.104214    1.1986148    -1.504014
> 132    3    10    48.719484    0.6765047    0.111256
>
> Thank you so much for your help.
> Kristiina
>
> --
> View this message in context:
> http://r.789695.n4.nabble.com/How-to-adjust-the-start-of-a-series-to-zero-i-e-subtract-the-first-value-from-the-sequence-tp4634999.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.
>
>
> ______________________________________________
> 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.
>



-- 

Bert Gunter
Genentech Nonclinical Biostatistics

Internal Contact Info:
Phone: 467-7374
Website:
http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm

	[[alternative HTML version deleted]]

