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

Gosia Gazda gosienka13 at interia.pl
Fri Mar 14 10:00:29 CET 2014


Thank you so much for all your answers my problem was solved. 
I really appreciate all your emails and really fast reaction.
All the best,
Malgorzata Gazda

Date sent:	Thu, 13 Mar 2014 22:38:54 +0100
From:	Arunkumar Srinivasan <aragorn168b at gmail.com>
To:	arun <smartpink111 at yahoo.com>, Dennis Murphy <djmuser at gmail.com>
Copies to:	R help <r-help at r-project.org>
Subject:	Re: [R] creating table with sequences of numbers based on the table

I think this'll be way simpler and also faster:

ans <- data.frame(pop = rep.int(tab$pop, tab$Freq), ind=sequence(tab$Freq))

Arun

From: Dennis Murphy djmuser at gmail.com
Reply: Dennis Murphy djmuser at gmail.com
Date: March 13, 2014 at 9:57:20 PM
To: arun smartpink111 at yahoo.com
Cc: R help r-help at r-project.org
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.  

	[[alternative HTML version deleted]]



Gosia Gazda
ul. Gardowskiego 20
30-864 Krakow


---
Ta wiadomość e-mail jest wolna od wirusów i złośliwego oprogramowania, ponieważ ochrona avast! Antivirus jest aktywna.
http://www.avast.com




More information about the R-help mailing list