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

如何为同一天内重复的ID添加带序号的SampleID列

如何为同一天内重复的ID添加带序号的SampleID列

看起来你需要给每个「同一天内同一母本(ID)的不同采集样本」分配唯一的SampleID,格式是ID-序号,序号代表该母本在当天的第几个采集样本对吧?你的思路方向是对的,但case_when的写法不太适合这种需要自动编号的场景,咱们换个更简洁的方式解决:

解决方案代码

首先确保你加载了dplyr包,然后用分组+组内编号的方式生成SampleID:

library(dplyr)

# 先还原你的示例数据
d1 <- as.Date('2021-06-07')
d2 <- as.Date('2021-06-08')
d3 <- as.Date('2021-06-09')

df <- data.frame(
  Days = c(1,1,2,2,2,2,3,3,3,3,3),
  ID = c(2,5,2,2,5,9,2,2,5,5,9),
  Collected = c(d1,d1,d2,d1,d1,d2,d1,d2,d1,d3,d2),
  Count = c(3,5,4,1,7,2,8,5,7,2,2) # 补上你示例里的Count列
)

# 生成SampleID
df <- df %>%
  group_by(Days, ID) %>%  # 按「天数+母本ID」分组
  mutate(SampleID = paste(ID, row_number(), sep = "-")) %>%  # 组内按行出现顺序生成序号,拼接成ID-序号
  ungroup()  # 取消分组,回到普通数据框

# 查看结果
print(df)

代码解释

  1. group_by(Days, ID):把数据按「天数」和「母本ID」分成小组,这样我们只需要在每个小组内给不同的采集样本编号。
  2. row_number():在每个分组里,会给每一行分配一个从1开始的连续序号——正好对应你需要的“第1个样本、第2个样本”的编号。
  3. paste(ID, row_number(), sep = "-"):把母本ID和组内序号用连字符拼接,得到你想要的SampleID格式。

可选调整:按采集日期排序编号

如果你的序号需要按Collected日期的顺序(比如最早的采集日期对应-1),只需要在分组后先按Collected排序,再生成序号:

df <- df %>%
  group_by(Days, ID) %>%
  arrange(Collected) %>%  # 先按采集日期升序排序
  mutate(SampleID = paste(ID, row_number(), sep = "-")) %>%
  ungroup()

这样调整后,Days=2、ID=2的两行里,采集日期更早的d1会对应2-1,d2对应2-2,你可以根据实际需求选择~

备注:内容来源于stack exchange,提问作者kirchoffs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 10:34:09