Мы можем использовать crossing
library(dplyr)
library(tidyr)
crossing(df1, df2) %>%
transmute(id = row_number(), Name, year)
# id Name year
#1 1 Bob 2001
#2 2 Bob 2002
#3 3 Bob 2003
#4 4 Bob 2004
#5 5 Sue 2001
#6 6 Sue 2002
#7 7 Sue 2003
#8 8 Sue 2004
Кажется, столбец 'id' в выводе не имеет ничего общего с исходными столбцами 'id' в наборе данных.В этом случае, сделайте crossing
без столбца 'id' и затем создайте 'id' как row_number()
crossing(df1[-1], df2[-1]) %>%
mutate(id = row_number())
data
df1 <- structure(list(id = 1:2, Name = c("Bob", "Sue")),
class = "data.frame", row.names = c(NA, -2L))
df2 <- structure(list(id = 1:4, year = 2001:2004), class = "data.frame",
row.names = c(NA, -4L))