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

2014-03-14 Thread Gosia Gazda
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 aragorn1...@gmail.com
To: arun smartpink...@yahoo.com, Dennis Murphy djmu...@gmail.com
Copies to:  R help r-help@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 djmu...@gmail.com
Reply: Dennis Murphy djmu...@gmail.com
Date: March 13, 2014 at 9:57:20 PM
To: arun smartpink...@yahoo.com
Cc: R help r-help@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 smartpink...@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@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@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

__
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.


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

2014-03-13 Thread arun
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@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.


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

2014-03-13 Thread Dennis Murphy
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 smartpink...@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
 popind

 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@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@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.


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

2014-03-13 Thread Arunkumar Srinivasan
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 djmu...@gmail.com
Reply: Dennis Murphy djmu...@gmail.com
Date: March 13, 2014 at 9:57:20 PM
To: arun smartpink...@yahoo.com
Cc: R help r-help@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 smartpink...@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@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@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]]

__
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.


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

2014-03-13 Thread William Dunlap
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-boun...@r-project.org [mailto:r-help-boun...@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 smartpink...@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
  popind
 
  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@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@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@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.


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

2014-03-13 Thread David Carlson
I think we're down to counting the number of characters in each
solution! Arun's 3 two-line versus your two-line solution (not
counting loading plyr). How about three short lines?

pop - rep(1:nrow(tab), tab$Freq)
ind - unlist(sapply(tab$Freq, seq_len))
tab2 - data.frame(pop, ind)

-
David L Carlson
Department of Anthropology
Texas AM University
College Station, TX 77840-4352

-Original Message-
From: r-help-boun...@r-project.org
[mailto:r-help-boun...@r-project.org] On Behalf Of Dennis Murphy
Sent: Thursday, March 13, 2014 3: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 smartpink...@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
 popind

 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@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@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@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.