0 votes
1 view
in R Programming by (5.3k points)

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

1 Answer

0 votes
by (25.3k points)

To replicate each row of a data frame and specify the number of replications for each row, you can use the uncount function from the tidyverse package as follows:

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

library(tidyr)

df %>% 

  uncount(freq)

Output:

    var1 var2

1      a    d

2      b    e

2.1    b    e

3      c    f

3.1    c    f

3.2    c    f

You can also use the following to replicate rows:

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

Output:

    var1 var2

1      a    d

2      b    e

2.1    b    e

3      c    f

3.1    c    f

3.2    c    f

Welcome to Intellipaat Community. Get your technical queries answered by top developers !


Categories

...