[R] creating table with sequences of numbers based on the table
Dennis Murphy
djmuser at gmail.com
Thu Mar 13 21:55:23 CET 2014
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.
More information about the R-help
mailing list