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

在R语言中按date列分组后为每组添加统一编号标签

按date列分组赋予统一编号标签的解决方法

问题场景

需要按date列对数据分组,为每个分组赋予统一的编号标签,数据示例如下:

df <- data.frame(id = c("RM125","RM126","RM121","RM120","RM128","RM129","RM131","RM133","RM135","RM132"),
                 date = c(rep("1110101",6),rep("1110102",4)))

期望输出中,所有相同date的行拥有一致的label编号。

原代码问题分析

你尝试的两段代码无法得到预期结果的原因:

  • df %>% group_by(date) %>% mutate(row_number()):row_number()是为每组内的行按顺序生成1、2、3...的序号,而非整个分组的统一编号。
  • df %>% group_by(date) %>% mutate(group = match(date, unique(date))):分组后每组内的unique(date)仅包含当前组的日期值,因此match始终返回1,所有组的编号都会是1。

可行解决方法

方法1:使用dplyr的cur_group_id()(推荐)

cur_group_id()会直接为每个分组分配唯一的编号,适配dplyr管道操作:

library(dplyr)

df_labeled <- df %>%
  group_by(date) %>%
  mutate(label = cur_group_id()) %>%
  ungroup()

print(df_labeled)

方法2:base R的match()方法

无需分组,直接通过match匹配唯一日期的出现顺序生成编号:

df$label <- match(df$date, unique(df$date))

方法3:base R的因子转数值方法

将date转为因子后再转为数值,自动按因子水平生成连续编号:

df$label <- as.numeric(factor(df$date))

以上三种方法都能得到符合预期的输出:

id    date label
1  RM125 1110101     1
2  RM126 1110101     1
3  RM121 1110101     1
4  RM120 1110101     1
5  RM128 1110101     1
6  RM129 1110101     1
7  RM131 1110102     2
8  RM133 1110102     2
9  RM135 1110102     2
10 RM132 1110102     2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 19:03:31