[R] Creating multiple copies of rows in data frames

Sundar Dorai-Raj sundar.dorai-raj at pdf.com
Fri Feb 10 21:45:17 CET 2006



Eric Archer wrote:
> ListeRs,
> 
> Within the last two months, I thought I saw mention of an R function 
> that would create a new data frame composed of duplicates or multiple 
> copies of rows of an input data frame given one or several columns of 
> values indicating how many times each row should be copied.  As a simple 
> example, given a dataframe:
> 
>  > in.df
>   x y
> 1 A 1
> 2 B 2
> 3 C 3
> 
> "func.name (in.df, in.df$y)" would produce something like:
> 
>   x y
> 1 A 1
> 2 B 2
> 3 B 2
> 4 C 3
> 5 C 3
> 6 C 3
> 
> For the life of me, I can't remember what that function was called, nor 
> can I find it using help.search or RSiteSearch on terms like "duplicate" 
> or "copy".  Perhaps it had another primary purpose, but this was a 
> side-effect or secondary capability.  Was I hallucinating, or does this 
> exist as a function in base R?  Or, will I have to make one with "rep"?
> Thanks in advance!
> 
> e.
> 


As you mentioned, ?rep should be sufficient:

in.df <- data.frame(x = LETTERS[1:3], y = 1:3)
out.df <- in.df[rep(seq(nrow(in.df)), in.df$y), ]

Then if you want to re-name the row.names

row.names(out.df) <- seq(nrow(out.df))

--sundar




More information about the R-help mailing list