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

R语言按id分组根据rank判断code一致性生成type标识列求助

R语言分组自定义类型字段实现方案

数据修正说明

原问题中示例数据框的id列定义和打印结果存在笔误,先修正数据定义如下:

DF <- data.frame(
  id = c("A1","A1","A1","B2","B2","B2"),
  rank = c("1","2","3","1","2","3"),
  code = c("A","B","B","B","B","A")
)

完整实现代码

使用dplyr包实现分组计算逻辑,代码如下:

library(dplyr)

result <- DF %>%
  # 按id分组执行所有计算逻辑
  group_by(id) %>%
  mutate(
    # 计算type1
    type1 = ifelse(rank == 1, tolower(code[rank == 1]), NA_character_),
    # 计算type2
    type2 = ifelse(
      rank <= 2,
      ifelse(n_distinct(code[rank <= 2]) == 1, tolower(first(code[rank <= 2])), "MIX"),
      NA_character_
    ),
    # 计算type3
    type3 = ifelse(n_distinct(code[rank <= 3]) == 1, tolower(first(code[rank <= 3])), "MIX")
  ) %>%
  ungroup()

# 查看结果
print(result)

运行后输出结果和题目要求的预期输出完全一致。

逻辑说明

  • type1:仅rank=1的行返回当前分组rank=1对应code的小写值,同组其他行返回NA
  • type2:先判断当前分组rank≤2的所有code值是否完全一致,一致则返回对应小写值,不一致返回MIX;仅rank≤2的行展示上述结果,同组其他行返回NA
  • type3:判断当前分组rank≤3的所有code值是否完全一致,一致则返回对应小写值,不一致返回MIX,同组所有行都展示该结果

高rank场景扩展

如果需要生成typeN(N为大于3的正整数)字段,只需按如下规则新增mutate逻辑即可:

typeN = ifelse(
  rank <= N,
  ifelse(n_distinct(code[rank <= N]) == 1, tolower(first(code[rank <= N])), "MIX"),
  NA_character_
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:15:04