'Expanding a data frame based on column-values [duplicate]

I have a data frame that has a structure similar to the following:

df <- data.frame(sample_id = c("s1", "s2", "s3"), 
                 group = c("1", "2", "3"),
                 frequency = c("4", "2", "2"))

print(df)

sample_id    group   frequency
  s1           1         4      
  s2           2         2      
  s3           3         2

For further manipulations and compatibility with downstream functions, I am looking for a way to transform this data frame by expanding the number of rows based on the number indicated in the frequency column. The expected output should look like this:

sample_id    group   frequency
  s1           1         1
  s1           1         1
  s1           1         1
  s1           1         1      
  s2           2         1
  s2           2         1      
  s3           3         1
  s3           3         1

I'd appreciate any help towards this (the real data set I have is huge, and I could not figure out an efficient way to do so).



Solution 1:[1]

We could use uncount from tidyr package:

library(dplyr)
library(tidyr)

df %>% 
  type.convert(as.is = TRUE) %>% 
  uncount(frequency)
  sample_id group
1        s1     1
2        s1     1
3        s1     1
4        s1     1
5        s2     2
6        s2     2
7        s3     3
8        s3     3

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 TarJae