在R中生成多变量全组合数据集并筛选符合条件的记录
解决方案:生成全组合数据集并筛选记录
Part 1:生成无重复全组合数据集
你之前用data.frame()的写法只是把向量按长度重复拼接,并没有生成所有变量的笛卡尔积(全组合)。要得到10个变量所有无重复的可能组合,用R内置的expand.grid()函数即可,它会自动遍历每个变量的所有取值,生成所有交叉组合。
修正后的完整代码:
# 定义各变量的取值向量 DrugA_LIFE <- c(0.5, 1, 2, 5) DrugA_NEED <- c(0, 1) DrugA_CERT <- c(0, 0.2, 0.4, 0.6) DrugA_RISK <- c(0.1, 0.2, 0.4, 0.6) DrugA_WAIT <- c(0, 0.5, 1, 2) DrugB_LIFE <- c(0.5, 1, 2, 5) DrugB_NEED <- c(0, 1) DrugB_CERT <- c(0, 0.2, 0.4, 0.6) DrugB_RISK <- c(0.1, 0.2, 0.4, 0.6) DrugB_WAIT <- c(0, 0.5, 1, 2) # 生成所有变量的全组合数据集 full_df <- expand.grid( DrugA_LIFE = DrugA_LIFE, DrugA_NEED = DrugA_NEED, DrugA_CERT = DrugA_CERT, DrugA_RISK = DrugA_RISK, DrugA_WAIT = DrugA_WAIT, DrugB_LIFE = DrugB_LIFE, DrugB_NEED = DrugB_NEED, DrugB_CERT = DrugB_CERT, DrugB_RISK = DrugB_RISK, DrugB_WAIT = DrugB_WAIT ) # 可选:将数据集导出为CSV文件 write.csv(full_df, "full_combination_dataset.csv", row.names = FALSE)
Part 2:用dplyr筛选符合条件的记录
使用dplyr的filter()函数,同时指定两个筛选条件即可:
# 若未安装dplyr,先执行安装命令 # install.packages("dplyr") # 加载dplyr包 library(dplyr) # 筛选满足条件的记录:DrugA_LIFE与DrugB_LIFE相等,且DrugA_NEED与DrugB_NEED相等 filtered_df <- full_df %>% filter(DrugA_LIFE == DrugB_LIFE, DrugA_NEED == DrugB_NEED)
内容的提问来源于stack exchange,提问作者Bob_123
相关产品推荐
相关产品推荐

