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

基于多列条件筛选颜色组合数据集的R语言技术需求

筛选颜色组合表的解决方案

根据你的需求,我们需要保留**恰好包含1个"ID"和1个"EMPTY"**的行(排除多出现或完全不出现的情况),以下是实现代码:

完整代码(base R 版本)

# 加载所需包
library(tidyr)

# 定义颜色列表
colour <- c("BK", "CS", "DB","DG","LB","LG","MV","OR","RD","WT","YL","ID","EMPTY")

# 生成所有4位组合
combo <- expand.grid(colour, colour, colour, colour)
colnames(combo) <- c('A','B','C','D')

# 逐行统计ID和EMPTY的出现次数
combo$id_count <- apply(combo, 1, function(row) sum(row == "ID"))
combo$empty_count <- apply(combo, 1, function(row) sum(row == "EMPTY"))

# 筛选符合条件的行:各恰好出现1次
filtered_combo <- subset(combo, id_count == 1 & empty_count == 1)

# 移除辅助计数列
filtered_combo <- filtered_combo[, c("A", "B", "C", "D")]

可选:dplyr 版本(更直观的管道语法)

如果你习惯用dplyr的链式写法,可以这样实现:

library(tidyr)
library(dplyr)

colour <- c("BK", "CS", "DB","DG","LB","LG","MV","OR","RD","WT","YL","ID","EMPTY")

combo <- expand.grid(colour, colour, colour, colour) %>%
  setNames(c('A','B','C','D'))

filtered_combo <- combo %>%
  rowwise() %>%
  mutate(
    id_count = sum(c_across(A:D) == "ID"),
    empty_count = sum(c_across(A:D) == "EMPTY")
  ) %>%
  filter(id_count == 1 & empty_count == 1) %>%
  select(-id_count, -empty_count)

逻辑说明

  • 先用expand.grid生成所有4位颜色组合,重命名列便于后续处理
  • 逐行统计"ID"和"EMPTY"的出现次数,作为筛选的核心依据
  • 最后通过条件筛选,只保留两种标识各出现恰好1次的行,同时移除辅助统计列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 10:45:33