Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Repeat dataframe with new column in R

Tags:

r

I have a dataframe:

my_df <- data.frame(var1 = c(1,2,3,4,5), var2 = c(6,7,8,9,10))
my_df
  var1 var2
1    1    6
2    2    7
3    3    8
4    4    9
5    5   10

I also have a vector:

my_vec <- c("a", "b", "c")

I want to repeat the dataframe length(my_vec) times, filling in the values of a new variable with the vector values. Is there a simple way to do this? If possible, i'd like to do this in a dplyr chain. Desired output:

  var1 var2 var3
1    1    6    a
2    2    7    a
3    3    8    a
4    4    9    a
5    5   10    a
6    1    6    b
7    2    7    b
8    3    8    b
9    4    9    b
10   5   10    b
11   1    6    c
12   2    7    c
13   3    8    c
14   4    9    c
15   5   10    c
like image 544
James Martherus Avatar asked Feb 21 '26 01:02

James Martherus


1 Answers

We can use crossing or with expand_grid

library(tidyr)
crossing(my_df, var3 = my_vec)
#expand_grid(my_df, var3 = my_vec)

If the order is important, use arrange

library(dplyr)
crossing(my_df, var3 = my_vec) %>% 
    arrange(var3)

-output

# A tibble: 15 × 3
    var1  var2 var3 
   <dbl> <dbl> <chr>
 1     1     6 a    
 2     2     7 a    
 3     3     8 a    
 4     4     9 a    
 5     5    10 a    
 6     1     6 b    
 7     2     7 b    
 8     3     8 b    
 9     4     9 b    
10     5    10 b    
11     1     6 c    
12     2     7 c    
13     3     8 c    
14     4     9 c    
15     5    10 c   
like image 135
akrun Avatar answered Feb 24 '26 04:02

akrun