R dplyr实现表1每行与整张表2列绑定的笛卡尔积连接方法
你要实现的是交叉连接(Cross Join,也称为笛卡尔积连接),该操作会返回两张表所有行的两两组合结果,完全匹配你预期的输出。以下是不同常用场景下的实现方式:
1. SQL 环境
直接使用CROSS JOIN关键字即可:
SELECT t1.a, t1.b, t2.c, t2.d FROM table1 t1 CROSS JOIN table2 t2;
绝大多数数据库也支持省略CROSS JOIN关键字,直接罗列两张表的写法,效果一致:
SELECT t1.a, t1.b, t2.c, t2.d FROM table1 t1, table2 t2;
2. Python Pandas 环境
Pandas 1.2.0及以上版本可以直接指定how='cross'执行交叉连接:
import pandas as pd # 示例表构造 df1 = pd.DataFrame({'a': ['a1', 'a2'], 'b': ['b1', 'b2']}) df2 = pd.DataFrame({'c': ['c1', 'c2'], 'd': ['d1', 'd2']}) # 执行交叉连接 res = df1.merge(df2, how='cross')
如果使用的是低版本Pandas,可以通过添加临时公共键的方式实现:
df1['tmp'] = 0 df2['tmp'] = 0 res = df1.merge(df2, on='tmp').drop('tmp', axis=1)
3. R 语言环境
基础R实现
df1 <- data.frame(a = c("a1", "a2"), b = c("b1", "b2")) df2 <- data.frame(c = c("c1", "c2"), d = c("d1", "d2")) res <- merge(df1, df2, by = NULL)
Tidyverse 生态实现
使用tidyr::crossing更简洁:
library(tidyr) res <- crossing(df1, df2)
内容的提问来源于stack exchange,提问作者Babak Fi Foo
相关产品推荐
相关产品推荐

