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

如何在type分组内将row按n个唯一值分组生成grp变量

R实现按type分组、按n个唯一row划分grp的方法

可以用dplyr包完成需求,核心逻辑是先在type分组内校验唯一row的数量是否符合整除要求,再给符合条件的组分配分组编号:

library(dplyr)

# 定义自定义函数,data为输入数据框,n为每组包含的唯一row数量
create_grp <- function(data, n) {
  data %>%
    group_by(type) %>%
    mutate(
      # 标记当前row是否是该type内的首次出现
      is_unique = !duplicated(row),
      # 统计该type下唯一row的总数量
      unique_count = sum(is_unique)
    ) %>%
    # 仅给首次出现的row分配临时组号
    mutate(temp_grp = ifelse(is_unique, ceiling(cumsum(is_unique)/n), NA)) %>%
    # 不满足整除条件的type,grp全设为NA;满足条件的则填充组号
    mutate(grp = ifelse(unique_count %% n != 0, NA, temp_grp)) %>%
    # 清理中间变量并取消分组
    select(-is_unique, -unique_count, -temp_grp) %>%
    ungroup()
}

# 测试n=4的情况
dat_with_grp <- create_grp(dat0, n=4)

# 查看结果
print(dat_with_grp)

代码说明

  1. 分组统计:按type分组后,标记每个row的首次出现,并统计该组内唯一row的总数;
  2. 临时组号分配:对首次出现的row,用累计计数除以n后向上取整生成组号,非首次的row暂时留空;
  3. 校验与填充:如果该type的唯一row总数不能被n整除,整个组的grp设为NA;符合条件的则把临时组号填充到对应row的所有重复行;
  4. 清理收尾:移除中间计算变量,取消分组,得到最终结果。

测试验证

  • 当n=4时,type a有8个唯一row,刚好分成2组;type b有12个唯一row,分成3组,所有对应行都会得到正确的grp值;
  • 当n=5时,type a和type b的唯一row总数都不能被5整除,所有行的grp都会返回NA。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 11:28:10