关于联接2个数据帧的指南,以使df2的每一行成为df1的整个列,并在df2的所有行上进行迭代

时间:2019-03-26 17:01:31

标签: r dplyr

我需要将两个df相乘以创建所有可能的解决方案,以用于Tableau场景。

方案如下:

我有一个汽车及其相关MPG的df1,以及一个邮政编码的df2,以及它们与固定点的相关距离(计算碳足迹)。创建df3后,我可以对整个df做更多的数学运算以得出最终指标。

我在下面尽了最大的努力来代表每个df的样本以及我要创建的结果df3。 df1是15,000行,而df2是535行,这意味着df3将有8m行。

在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 个答案:

答案 0 :(得分:3)

我们可以使用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))