Руководство по объединению 2 фреймов данных, таким образом, что каждая строка df2 становится целым столбцом df1, повторяется по всем строкам df2

#r #dplyr

#r #dplyr

Вопрос:

Мне нужно «умножить» два df вместе, чтобы создать все возможные решения для использования в сценарии Tableau.

Сценарий следующий:

У меня есть df1 автомобилей и связанных с ними миль на галлон, и df2 почтовых индексов и связанного с ними расстояния от фиксированной точки (вычисление углеродного следа). Как только я создам df3, я смогу выполнить дополнительные вычисления по всему df, чтобы добраться до моей окончательной метрики.

Ниже я постарался изо всех сил представить образец каждого df и результирующий df3, который я хочу создать. df1 — это 15 000 строк, а df2 — это 535 строк, что означает, что df3 будет содержать 8 миллионов строк.

Возможно, есть лучший способ сделать это в tableau; однако мне удобнее в R.

DF1

 mpg|year|make |model
--------------------
 21|1985|dodge|charger
 19|1993|Audi |100

  

DF2

 zipcode|distace
---------------
 20015 | 8.91
 20020 | 12.72
  

DF3

 mpg|year|make |model  |zipcode|distance
-----------------------------------------
 21|1985|dodge|charger| 20015 |8.91 
 19|1993|Audi |100    | 20015 |8.91
 21|1985|dodge|charger| 20020 |12.72
 19|1993|Audi |100    | 20020 |12.72



  

Ответ №1:

Мы можем использовать crossing

 library(tidyr)
crossing(DF1, DF2)
#  mpg year  make   model zipcode distance
#1  21 1985 dodge charger   20015     8.91
#2  21 1985 dodge charger   20020    12.72
#3  19 1993  Audi     100   20015     8.91
#4  19 1993  Audi     100   20020    12.72
  

данные

 DF1 <- structure(list(mpg = c(21L, 19L), year = c(1985L, 1993L), make = c("dodge", 
"Audi"), model = c("charger", "100")), class = "data.frame", row.names = c(NA, 
-2L))

DF2 <- structure(list(zipcode = c(20015L, 20020L), distance = c(8.91, 
12.72)), class = "data.frame", row.names = c(NA, -2L))