wkmor1 wkmor1 - 2 months ago 9
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:

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


To this:

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

Answer

Here's one solution:

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

Result:

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