如何创建固定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
相关产品推荐
相关产品推荐

