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.