在R语言中为重复值分配索引值的实现方法
为重复ID分配递增索引的实现方法
以下是几种在R中实现为重复ID分配组内递增索引的常用方案:
方法1:Base R 原生实现
利用ave()函数结合cumsum(),无需额外安装包:
df <- data.frame(id = c("A","A","B","C","D","D","D")) # 为每个id组生成从1开始的递增计数 df$index <- ave(rep(1, nrow(df)), df$id, FUN = cumsum) # 查看结果 df
输出结果:
id index 1 A 1 2 A 2 3 B 1 4 C 1 5 D 1 6 D 2 7 D 3
方法2:dplyr 包实现(tidyverse 风格)
如果你习惯使用tidyverse生态,用group_by()分组后调用row_number()生成索引:
library(dplyr) df <- data.frame(id = c("A","A","B","C","D","D","D")) df1 <- df %>% group_by(id) %>% mutate(index = row_number()) %>% ungroup() # 取消分组状态,避免后续操作受影响 df1
输出结果与上述一致。
方法3:data.table 包实现(高效处理大数据)
针对大规模数据集,data.table的分组操作效率更高:
library(data.table) dt <- data.table(id = c("A","A","B","C","D","D","D")) # 按id分组,每组生成从1到组内行数的序列 dt[, index := seq_len(.N), by = id] dt
输出结果同样符合需求。
内容的提问来源于stack exchange,提问作者amisos55
相关产品推荐
相关产品推荐

