tapply() (of which by() is essentially a wrapper) **is** a (disguised) loop (at the R level, of course). Cheers, Bert Bert Gunter Genentech Nonclinical Biostatistics (650) 467-7374 "Data is not information. Information is not knowledge. And knowledge is certainly not wisdom." Clifford Stoll On Wed, Feb 4, 2015 at 11:49 AM, Rui Barradas <ruipbarradas at sapo.pt> wrote:> Hello, > > Aren't the levels of your example wrong? If the levels are > levels=c('a','b','c'), not c('b', 'a', 'c'), then the following will do the > job. > > unname(unlist(tapply(dat$D, dat$S, order))) > > > Hope this helps, > > Rui Barradas > > Em 04-02-2015 19:34, Tom Wright escreveu: >> >> Given a dataframe: >> >> dat<-data.frame(S=factor(c(rep('a',2),rep('b',1),rep('c',3)),levels=c('b','a','c')), >> D=c(5,1,3,2,3,4)) >> >> where S is a subject identifier and D a visit (actually a date in my >> real dataset). I would like to generate another column giving the visit >> number >> >> R=c(2,1,1,1,2,3) >> >> My current solution uses nested loops and is slow and ugly. I've looked >> at by() but can't see how to keep the order of R correct. >> >> Thanks, >> Tom >> >> ______________________________________________ >> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >> 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 at r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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.
No problem with disguise, I'm looking for pretty. On Wed, 2015-02-04 at 12:06 -0800, Bert Gunter wrote:> tapply() (of which by() is essentially a wrapper) **is** a (disguised) > loop (at the R level, of course). > > Cheers, > Bert > > > > Bert Gunter > Genentech Nonclinical Biostatistics > (650) 467-7374 > > "Data is not information. Information is not knowledge. And knowledge > is certainly not wisdom." > Clifford Stoll > > > > > On Wed, Feb 4, 2015 at 11:49 AM, Rui Barradas <ruipbarradas at sapo.pt> wrote: > > Hello, > > > > Aren't the levels of your example wrong? If the levels are > > levels=c('a','b','c'), not c('b', 'a', 'c'), then the following will do the > > job. > > > > unname(unlist(tapply(dat$D, dat$S, order))) > > > > > > Hope this helps, > > > > Rui Barradas > > > > Em 04-02-2015 19:34, Tom Wright escreveu: > >> > >> Given a dataframe: > >> > >> dat<-data.frame(S=factor(c(rep('a',2),rep('b',1),rep('c',3)),levels=c('b','a','c')), > >> D=c(5,1,3,2,3,4)) > >> > >> where S is a subject identifier and D a visit (actually a date in my > >> real dataset). I would like to generate another column giving the visit > >> number > >> > >> R=c(2,1,1,1,2,3) > >> > >> My current solution uses nested loops and is slow and ugly. I've looked > >> at by() but can't see how to keep the order of R correct. > >> > >> Thanks, > >> Tom > >> > >> ______________________________________________ > >> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > >> 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 at r-project.org mailing list -- To UNSUBSCRIBE and more, see > > 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.
>dat<-data.frame(S=factor(c(rep('a',2),rep('b',1),rep('c',3)),levels=c('b','a','c')), + D=c(5,1,3,2,3,4))> datS D 1 a 5 2 a 1 3 b 3 4 c 2 5 c 3 6 c 4> dat$visit <- ave(seq(nrow(dat)), dat$S, FUN = seq_along) > datS D visit 1 a 5 1 2 a 1 2 3 b 3 1 4 c 2 1 5 c 3 2 6 c 4 3 Jim Holtman Data Munger Guru What is the problem that you are trying to solve? Tell me what you want to do, not how you want to do it. On Wed, Feb 4, 2015 at 3:08 PM, Tom Wright <tom at maladmin.com> wrote:> No problem with disguise, I'm looking for pretty. > > On Wed, 2015-02-04 at 12:06 -0800, Bert Gunter wrote: > > tapply() (of which by() is essentially a wrapper) **is** a (disguised) > > loop (at the R level, of course). > > > > Cheers, > > Bert > > > > > > > > Bert Gunter > > Genentech Nonclinical Biostatistics > > (650) 467-7374 > > > > "Data is not information. Information is not knowledge. And knowledge > > is certainly not wisdom." > > Clifford Stoll > > > > > > > > > > On Wed, Feb 4, 2015 at 11:49 AM, Rui Barradas <ruipbarradas at sapo.pt> > wrote: > > > Hello, > > > > > > Aren't the levels of your example wrong? If the levels are > > > levels=c('a','b','c'), not c('b', 'a', 'c'), then the following will > do the > > > job. > > > > > > unname(unlist(tapply(dat$D, dat$S, order))) > > > > > > > > > Hope this helps, > > > > > > Rui Barradas > > > > > > Em 04-02-2015 19:34, Tom Wright escreveu: > > >> > > >> Given a dataframe: > > >> > > >> > dat<-data.frame(S=factor(c(rep('a',2),rep('b',1),rep('c',3)),levels=c('b','a','c')), > > >> D=c(5,1,3,2,3,4)) > > >> > > >> where S is a subject identifier and D a visit (actually a date in my > > >> real dataset). I would like to generate another column giving the > visit > > >> number > > >> > > >> R=c(2,1,1,1,2,3) > > >> > > >> My current solution uses nested loops and is slow and ugly. I've > looked > > >> at by() but can't see how to keep the order of R correct. > > >> > > >> Thanks, > > >> Tom > > >> > > >> ______________________________________________ > > >> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > > >> 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 at r-project.org mailing list -- To UNSUBSCRIBE and more, see > > > 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 at r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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]]