You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建固定Var1行值、匹配对应Var2和Var3的DataFrame

实现目标结果的几种方法

方法1:先构建Var2与Var3的对应关系,再生成笛卡尔积

先定义Var2和Var3的固定配对,再和Var1生成笛卡尔积,直接得到目标结果:

var1 <- c(101,102,103,104)
# 定义Var2和Var3的绑定配对
var_pair <- data.frame(Var2 = c("AB", "XY"), Var3 = c(1, 2))
# 生成Var1与配对数据的笛卡尔积
result <- expand.grid(Var1 = var1, var_pair)
# 按Var1排序并重置行名
result <- result[order(result$Var1), ]
rownames(result) <- NULL
result

输出结果:

Var1 Var2 Var3
1  101   AB    1
2  101   XY    2
3  102   AB    1
4  102   XY    2
5  103   AB    1
6  103   XY    2
7  104   AB    1
8  104   XY    2

方法2:从原全排列数据中筛选符合条件的行

如果已经生成了全排列的X数据框,直接筛选满足配对条件的行即可:

var1<-c(101,102,103,104)
var2<-c("AB","XY")
var3<-c(1,2)
X<-expand.grid(var1,var2,var3)
names(X) <- c("Var1", "Var2", "Var3")

# 筛选AB对应1、XY对应2的行
result <- X[(X$Var2 == "AB" & X$Var3 == 1) | (X$Var2 == "XY" & X$Var3 == 2), ]
# 按Var1排序并重置行名
result <- result[order(result$Var1), ]
rownames(result) <- NULL
result

此方法同样能得到目标格式的结果。

方法3:使用tidyverse工具包(可选)

如果习惯tidyverse语法,用crossing函数可以更简洁地实现:

library(tidyverse)

var1 <- c(101,102,103,104)
var_pair <- tibble(Var2 = c("AB", "XY"), Var3 = c(1, 2))

result <- crossing(Var1 = var1, var_pair)
result

输出自动符合排序和格式要求。

内容的提问来源于stack exchange,提问作者vp_050

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 11:22:47