wkmor1 wkmor1 - 11 months ago 44
R Question

Replicate each row of data.frame and specify the number of replications for each row

df <- data.frame(var1=c('a', 'b', 'c'), var2=c('d', 'e', 'f'), freq=1:3)

What is the simplest way to expand the first two columns of the data.frame above, so that
each row appears the number of times specified in the column 'freq'?

In other words, go from this:

var1 var2 freq
1 a d 1
2 b e 2
3 c f 3

To this:

var1 var2
1 a d
2 b e
3 b e
4 c f
5 c f
6 c f

Answer Source

Here's one solution:

df.expanded <- df[rep(row.names(df), df$freq), 1:2]


    var1 var2
1      a    d
2      b    e
2.1    b    e
3      c    f
3.1    c    f
3.2    c    f