How to adjust the start of a series to zero? (i.e. subtract the first value from the sequence)
On 2012-07-02 12:25, David Winsemius wrote:
On Jul 2, 2012, at 2:21 AM, Bert Gunter wrote:
Hi Kristina: That's because I gave you the wrong function. It should be "with" not "within", as: sort2v4$adj_mean<-with(sort2v4, ave(mean, point, FUN=function(x)x- x[1])) within(dat,...) returns dat suitably modified. with (dat,...) just returns the result of the function. I frequently use within() when I mean with(), unfortunately. Sorry for the error.
That's interesting to me. I almost never use `within`. I'm wondering if I'm missing something? As I read the help page `within` is going to do something different when the expression is an assignment, so one could do the following with `within` within(dfrm, var2 <- var2/100) ... but that would have no lasting effect since its result was not assigned, so I do not se an advantage over: dfrm$var2 <- with(dfrm, var2/100) In both case one would still need to assign the result to an object, in the case of the first to 'dfrm' itself and in the second case to dfrm[['var2']]. None of the examples on the help page use `within`. Is that because it is inferior to transform?
[....]
I don't think that within() is inferior to transform().
I started using it after seeing some code by Bill Venables
and I now use it fairly frequently (not as frequently as the
quite useful with(), though). I think that within() can be
more versatile than transform(); consider:
aq <- head(airquality)
aq1 <- transform(aq, new1 = Ozone^2,
new2 = new1 + 10)
#Error in eval(expr, envir, enclos) : object 'new1' not found
aq1 <- within(aq, {new1 <- Ozone^2;
new2 <- new1 + 10})
I agree that, for a single new or redefined variable,
the 'df$newvar <- ...' assignment is straightforward,
but for fairly extensive modifications, within() is
very nice. The only thing that bugs me about within()
is that the new variables are appended in "reverse"
order.
Peter Ehlers