Expanding dataframe in R

I have the following data in R:

Group Dummy_N Total_N Other val
1 1 4 x
2 2 3 y

I want to expand this data so that there are Total_N number of rows with Dummy_N number of 1s.Like:

Group Dummy_N Total_N Other val
1 1 4 x
1 0 4 x
1 0 4 x
1 0 4 x
2 1 3 y
2 1 3 y
2 0 3 y

I am able to expand it with the following code:

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

But I am struggling to implement making the Dummy N which corresponds to the number in Dummy_N in the first table.

>Solution :

An option in tidyverse would be to expand the data with uncount (similar to rep(...) in base R), then convert the ‘Dummy_N’ column to binary by creating a logical vector with the sequence (row_number()) and its value, grouped by ‘Group’ column

library(dplyr)# version >= 1.1.0
library(tidyr)
df %>% 
  uncount(Total_N, .remove = FALSE) %>%
   mutate(Dummy_N = +(row_number() <= Dummy_N), .by = Group)

-output

   Group Dummy_N Total_N Otherval
1     1       1       4        x
2     1       0       4        x
3     1       0       4        x
4     1       0       4        x
5     2       1       3        y
6     2       1       3        y
7     2       0       3        y

Leave a Reply