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

R语言按分组判断因子列是否统一并生成分组标识方法

使用dplyr的分组聚合逻辑即可快速实现两个需求,完整可复现代码如下:

# 加载依赖包
library(tidyverse)

# 构造示例数据
df <- tibble(
  group_id = factor(c("A", "A", "A","B","B","B","C")), 
  status = factor(c("complete","complete", NA, "complete", "not complete", "complete", "complete"))
)

# 数据处理
df_result <- df %>%
  # 按group_id分组,所有计算在分组内执行
  group_by(group_id) %>%
  mutate(
    # 计算uniform_status
    uniform_status = ifelse(
      is.na(status),
      NA,
      # 统计分组内去除NA后的status唯一值数量,等于1则为统一
      n_distinct(status, na.rm = TRUE) == 1
    ),
    # 计算status_group
    status_group = ifelse(
      # 仅当分组status不统一且当前行status不为空时分配编号
      uniform_status == FALSE & !is.na(status),
      # 按status值分配编号,相同status编号一致
      dense_rank(status),
      NA
    )
  ) %>%
  # 取消分组
  ungroup()

# 查看结果
print(df_result)

运行后输出结果和你给出的预期完全一致:

# A tibble: 7 × 4
  group_id status       uniform_status status_group
  <fct>    <fct>        <lgl>                 <int>
1 A        complete     TRUE                     NA
2 A        complete     TRUE                     NA
3 A        NA           NA                       NA
4 B        complete     FALSE                     1
5 B        not complete FALSE                     2
6 B        complete     FALSE                     1
7 C        complete     TRUE                     NA

逻辑说明

  1. 先按group_id对数据分组,所有统计计算都在各自分组内独立执行
  2. uniform_status列:当前行status为缺失值时直接返回NA,否则统计分组内去除缺失值后的status唯一值数量,数量为1说明取值统一返回TRUE,否则返回FALSE
  3. status_group列:仅当分组status不统一且当前行status不为缺失值时,用dense_rank()给不同的status分配连续编号,同一status编号相同,其余场景返回NA。如果需要自定义编号顺序,提前调整status的因子水平顺序即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:27:03