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

R语言按双变量分组依据rank范围生成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"))

原始数据预览:

idrankcode
A11A
A12B
A13B
B21B
B22B
B23A

实现规则(按id分组计算)

  • type1:取当前id下rank=1的code值转小写重复2次,仅rank=1的行展示该值,其余行填充NA
  • type2:取当前id下rank为1、2的code值,若两个值不同则填充MIX,若相同则转小写重复2次,仅rank≤2的行展示值,其余行填充NA
  • type3:取当前id下rank为1-3的全部code值,若存在不同值则填充MIX,所有行均展示该值

实现代码

使用dplyr实现逻辑最简洁:

library(dplyr)

result <- DF %>%
  group_by(id) %>%
  mutate(
    # 计算type1
    type1 = ifelse(rank == 1, paste0(rep(tolower(code[rank == 1]),2), collapse = ""), NA),
    # 计算type2
    type2 = {
      code_12 <- code[rank %in% c("1","2")]
      val <- ifelse(length(unique(code_12)) == 1, paste0(rep(tolower(unique(code_12)),2), collapse = ""), "MIX")
      ifelse(rank %in% c("1","2"), val, NA)
    },
    # 计算type3
    type3 = ifelse(length(unique(code)) == 1, paste0(rep(tolower(unique(code)),2), collapse = ""), "MIX")
  ) %>%
  ungroup()

输出结果

和预期完全一致:

idrankcodetype1type2type3
A11AaaMIXMIX
A12BNAMIXMIX
A13BNANAMIX
B21BbbbbMIX
B22BNAbbMIX
B23ANANAMIX

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:39:04