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

使用dplyr按ID分组重分配信号标签:双标签ID用占优标签覆盖全组

标签规则处理dplyr实现方案

需求说明

每个ID记录了一系列信号标签,取值为"alpha"、"beta"和"unknown"。处理规则为:

  • 若某个ID对应的标签仅有2种取值,将该ID下所有记录的标签替换为占比最高的主导标签,例如某ID的标签为c("alpha", "alpha", "unknown"),处理后变为c("alpha", "alpha", "alpha")
  • 若ID对应的标签仅有1种、或同时存在3种取值,保留原有标签不变

测试数据集构造

library(tidyverse)

# 数据准备(可直接使用下方构造的tbl对象)
ID <- c(rep("A", 14), rep("B", 14), rep("C", 10), rep("D", 22), rep("E", 2))
series <- c(11, 3, 12, 2, 8, 2, 11, 8, 3, 2)

label <- unlist(
  sapply(series, function(x) {case_when(x < 5 ~ rep("unknown", x),
                                            x >= 5 ~ case_when(x > 10 ~ rep("alpha", x),
                                                               x <= 10 ~ rep("beta", x))                                                               )
  }))

# 构造tbl对象
tbl <- tibble(ID = ID, 
              label = label)

实现代码

tbl_processed <- tbl %>%
  group_by(ID) %>%
  mutate(
    # 统计当前ID的标签种类数
    label_type_cnt = n_distinct(label),
    # 统计当前ID出现频次最高的主导标签
    dominant_label = names(which.max(table(label)))
  ) %>%
  mutate(
    # 仅当标签种类为2时替换为统一主导标签
    label = ifelse(label_type_cnt == 2, dominant_label, label)
  ) %>%
  # 移除计算过程的辅助列
  select(-label_type_cnt, -dominant_label) %>%
  ungroup()

结果验证

可以通过以下代码查看各ID处理后的标签情况:

tbl_processed %>%
  group_by(ID) %>%
  summarise(
    标签唯一值 = paste(unique(label), collapse = "、"),
    总记录数 = n()
  )

运行后可得到预期结果:

  • ID A、B的标签统一为alpha
  • ID C的标签统一为beta
  • ID D保留3种原有标签
  • ID E保留唯一标签unknown

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:45:03