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

在R数据框中按规则将重复行标记为重复样本(replicates)

问题解决:为分组重复样本分配唯一编号

问题背景

现有一个包含1个连续变量列(cont.var)和2个因子列(fact1、fact2,取值为0或1)的数据框,需要按规则为重复行分配唯一的重复样本编号(rep)。

原始数据结构:

cont.var fact1 fact2
1      1.0     1     0
2      1.0     0     1
3      1.5     1     0
4      1.5     1     0
5      1.5     0     1
6      1.5     0     1

规则说明

  • 若两行cont.var值相同,但fact1和fact2的组合不同,需分配不同的重复样本编号
  • 若两行cont.var值相同,且fact1、fact2的组合也相同,需分配相同的重复样本编号

期望输出

cont.var fact1 fact2 rep
1       1.0     1     0   1
2       1.0     0     1   2
3       1.5     1     0   3
4       1.5     1     0   3
5       1.5     0     1   4
6       1.5     0     1   4

无效尝试代码

使用make.unique无法满足需求,会导致相同cont.var但不同因子组合的行得到重复编号:

library(dplyr)

sample.df <- data.frame(
  cont.var = c(1,1,1.5,1.5,1.5,1.5,2,2,2,3),
  fact1 = c(1,0,1,1,0,0,1,1,0,1),
  fact2 = c(0,1,0,0,1,1,0,0,1,0)
)
  
sample.df %>% 
    group_by(cont.var, fact1, fact2) %>% 
    mutate(replicate = make.unique(as.character(cont.var), "_"))

解决方案

核心思路:将cont.var、fact1、fact2的组合作为分组依据,为每个唯一组分配递增的整数编号,以下两种方法均可实现:

方法1:使用cur_group_id()(适用于dplyr 1.0.0及以上版本)

library(dplyr)

sample.df <- data.frame(
  cont.var = c(1,1,1.5,1.5,1.5,1.5,2,2,2,3),
  fact1 = c(1,0,1,1,0,0,1,1,0,1),
  fact2 = c(0,1,0,0,1,1,0,0,1,0)
)

sample.df <- sample.df %>%
  group_by(cont.var, fact1, fact2) %>%
  mutate(rep = cur_group_id()) %>%
  ungroup()

print(sample.df)

方法2:使用group_indices()(兼容旧版dplyr)

sample.df <- sample.df %>%
  mutate(rep = group_indices(., cont.var, fact1, fact2))

两种方法都会为每个cont.var + fact1 + fact2的唯一组合分配连续整数编号,完全匹配需求:同一组合的行共享编号,不同组合(即使cont.var相同)获得不同编号。

验证输出

运行代码后,前6行输出与期望一致:

cont.var fact1 fact2 rep
1       1.0     1     0   1
2       1.0     0     1   2
3       1.5     1     0   3
4       1.5     1     0   3
5       1.5     0     1   4
6       1.5     0     1   4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 18:30:27