That should be:


transform(DF, Time = ave(1:nrow(DF), Subject, FUN = function(ix)
  with(DF[ix,], if (any(Marker == 1)) Time - Time[Marker == 1] else Time)))


On Fri, Dec 4, 2009 at 6:36 PM, Gabor Grothendieck
<ggrothendieck@gmail.com>wrote:

> Try this:
>
> transform(DF, Time = ave(1:nrow(DF), Subject, FUN = function(ix)
>     if (any(Marker[ix] == 1)) Time - Time[Marker == 1] else Time))
>
>
>
>
> On Fri, Dec 4, 2009 at 5:47 PM, Dennis Fisher <fisher@plessthan.com>wrote:
>
>> Colleagues,
>>
>> R 2.9.0 on all platforms
>>
>> I have a dataset that contains three columns of interest: ID's, serial
>> elapsed times, and a marker.  Representative data:
>> Subject         Time            Marker
>> 1                       100.5           0
>> 1                       101                     0
>> 1                       102                     1
>> 1                       103                     0
>> 1                       105                     0
>>
>> For each subject, I would like to find the time associated with MARKER ==
>> 1, then replace Time with Time - (Time[Marker == 1])
>> The result for this subject would be:
>> Subject         Time            Marker
>> 1                       -1.5                    0
>> 1                       -1                      0
>> 1                       0                       1
>> 1                       1                       0
>> 1                       3                       0
>>
>> One proviso: some subjects do not have Marker == 1; for these subjects, I
>> would like Time to remain unchanged.
>>
>> At present, I am looping over each subject.  The number of subjects is
>> large so this process is quite slow.  I assume that one of the apply
>> functions could speed this markedly but I am not facile with them.  Any help
>> would be appreciated.
>>
>> Dennis
>>
>> Dennis Fisher MD
>> P < (The "P Less Than" Company)
>> Phone: 1-866-PLessThan (1-866-753-7784)
>> Fax: 1-866-PLessThan (1-866-753-7784)
>> www.PLessThan.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]]


