Back

Explore Courses Blog Tutorials Interview Questions
0 votes
2 views
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

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!

30.5k questions

32.5k answers

500 comments

108k users

Browse Categories

...