Petr PIKAL wrote:
> Hi
>
> [EMAIL PROTECTED] napsal dne 08.10.2007 14:24:13:
>
>   
>> Hi,
>>
>> I would like to fix the data in the following data.frame, and I am
>> having trouble coding this in R - help please!
>>
>>     
>>> x
>>>       
>>   A    B   x    y     z
>> 1 1 10.0 100 1000 10000
>> 2 2 19.8 200 2000 20000
>> 3 3 20.1 300 3000 30000
>> 4 4 20.3 400 4000 40000
>> 5 5 30.0 500 5000 50000
>>
>> Column B is the problem.
>>
>> The logic I need to apply (this is in pseudo code ... I don't know how
>> to do this in R)
>>
>> for all rows, r
>> if x$B[r] <= x$B[r-1] + a 
>>    then x$B[r] = x$B[r-1]
>>
>> i.e. If a=1, then I would end up with the data.frame
>>
>>     
>>> x
>>>       
>>   A    B   x    y     z
>> 1 1 10.0 100 1000 10000
>> 2 2 19.8 200 2000 20000
>> 3 3 19.8 300 3000 30000
>> 4 4 19.8 400 4000 40000
>> 5 5 30.0 500 5000 50000
>>     
>
> [...]
>
>   
>> b.na <- test$B
>> b.na[c(F,diff(test$B)<1)] <- NA
>> b.na
>>     
It is not clear that this works. What if test$B[4] is 20.9 instead of 20.3?

There are cases that just don't vectorize. Brute force may be the only
solution. It may be slow, but it is available.

X <- test$B
for (i in seq_along(X[-1]))
   if (X[i] - X[i-1] < 1)
      X[i] <- X[i-1]
test$B <- X

-- 
   O__  ---- Peter Dalgaard             Ă˜ster Farimagsgade 5, Entr.B
  c/ /'_ --- Dept. of Biostatistics     PO Box 2099, 1014 Cph. K
 (*) \(*) -- University of Copenhagen   Denmark          Ph:  (+45) 35327918
~~~~~~~~~~ - ([EMAIL PROTECTED])                  FAX: (+45) 35327907

______________________________________________
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