[R] creating table with sequences of numbers based on the table

William Dunlap wdunlap at tibco.com
Thu Mar 13 22:47:01 CET 2014


Or use sequence() and rep(), as in
  u1 <- with(tab, data.frame(pop=rep(pop,Freq), ind=sequence(Freq)))
I think that u1 is the same as your u.

Bill Dunlap
TIBCO Software
wdunlap tibco.com


> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf
> Of Dennis Murphy
> Sent: Thursday, March 13, 2014 1:55 PM
> To: arun
> Cc: R help
> Subject: Re: [R] creating table with sequences of numbers based on the table
> 
> Less coding with plyr:
> 
> tab <- read.table(text="pop Freq
> 1       1   30
> 2       2   25
> 3       3   30
> 4       4   30
> 5       5   30
> 6       6   30
> 7       7   30",sep="",header=TRUE)
> 
> # Function to do the work on each row
> f <- function(pop, Freq) data.frame(ind = seq_len(Freq))
> 
> library(plyr)
> u <- mdply(tab, f)[, -2]
> 
> Dennis
> 
> On Thu, Mar 13, 2014 at 8:01 AM, arun <smartpink111 at yahoo.com> wrote:
> > Hi,
> > Try:
> > Either
> >
> > tab <- read.table(text="pop Freq
> > 1       1   30
> > 2       2   25
> > 3       3   30
> > 4       4   30
> > 5       5   30
> > 6       6   30
> > 7       7   30",sep="",header=TRUE)
> >
> > indx <- rep(1:nrow(tab),tab$Freq)
> > tab1 <- transform(tab[indx,],ind=ave(seq_along(indx),indx,FUN=seq_along))[,-2]
> > #or
> > tab2 <-  transform(tab[indx,],ind=unlist(sapply(tab$Freq,seq)))[,-2]
> > identical(tab1,tab2)
> > #[1] TRUE
> > #or
> > tab3 <- transform(tab[indx,], ind= with(tab,seq_len(sum(Freq))-rep(cumsum(c(0L,Freq[-
> length(Freq)])),Freq)))[,-2]
> > identical(tab1,tab3)
> > #[1] TRUE
> >
> > A.K.
> >
> >
> > I have a problem with transfering one table to another automatically. From table like
> this:
> >
> >> tab
> >   pop Freq
> > 1       1   30
> > 2       2   25
> > 3       3   30
> > 4       4   30
> > 5       5   30
> > 6       6   30
> > 7       7   30
> >
> > I want to use number of individuals (freq) and then in next
> > table just list them with following numbers (depending on total number
> > of individuals)
> > Like this:
> > in
> > pop        ind
> >
> > 1              1
> > 1              2
> > 1              3
> > 1              4
> > .               .
> > .               .
> > 1              30
> > 2              1
> > 2              2
> > 2              3
> > 2              4
> > .               .
> > 2              25
> > 3              1
> > 3              2
> > .               .
> > .               .
> >
> > How can i do it? I think i have to use loops but so far I failed.
> > Thank you in advance,
> > Best,
> > Malgorzata Gazda
> >
> > ______________________________________________
> > R-help at 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.
> 
> ______________________________________________
> R-help at 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.




More information about the R-help mailing list