[R] creating table with sequences of numbers based on the table
David Carlson
dcarlson at tamu.edu
Thu Mar 13 22:48:40 CET 2014
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 A&M University
College Station, TX 77840-4352
-----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 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 <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