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

如何在R语言中标记重复值的重复出现次数?

嘿,这个需求我之前处理重复数据的时候也遇到过,其实不用局限在duplicated()的结果上,咱们换个思路,直接给每个重复组做累计计数,就能轻松得到每个值是第几次出现啦!下面给你几种实用的实现方式:

实现思路与代码示例

核心逻辑是按值分组后累计计数:不管是用tidyverse工具还是基础R,只要能给每个相同值的元素分配一个“出现序号”,就能直接得到你要的重复次数(第一次重复对应序号2,或者你可以调整成从1开始计数)。

方法1:用dplyr(简洁易读,适合tidyverse用户)

如果你平时习惯用tidyverse系列包,dplyr的分组+突变操作非常直观:

library(dplyr)

# 示例数据
test_list <- c("A", "B", "A", "A", "C", "B")

# 给每个值添加出现序号
result_df <- tibble(value = test_list) %>%
  group_by(value) %>%
  mutate(repeat_count = row_number()) %>%  # 每个组内的序号,第一次出现是1,第二次是2...
  ungroup()

# 如果你只需要重复项(也就是非第一次出现的元素)
duplicates_with_index <- result_df %>% filter(repeat_count > 1)

这里的repeat_count就是每个值的出现次数,要是你想把“第一次重复”标记为1,只需要改成repeat_count - 1就行。

方法2:基础R实现(无需额外包)

不想加载第三方包的话,用基础R的ave()函数就能搞定,它专门用来按组计算:

# 示例数据
test_list <- c("A", "B", "A", "A", "C", "B")

# 计算每个值的出现序号
repeat_count <- ave(seq_along(test_list), test_list, FUN = seq_along)

# 组合成数据框查看
result_df <- data.frame(
  original_value = test_list,
  repeat_count = repeat_count
)

# 提取重复项
duplicates_with_index <- result_df[repeat_count > 1, ]

ave()会自动把test_list按相同值分组,对每个组的位置生成连续序号,效果和dplyr完全一致。

结合你已有的dups变量

如果你已经生成了dups <- duplicated(test_list),也可以基于这个结果来生成重复次数:

# 先获取所有重复项的位置
dup_positions <- which(dups)
# 提取这些位置对应的原数值
dup_values <- test_list[dup_positions]
# 给这些重复值按组计数(第一次重复是1,第二次是2...)
dup_repeat_times <- ave(seq_along(dup_values), dup_values, FUN = seq_along)

# 最终结果:位置、值、重复次数
final_result <- data.frame(
  position = dup_positions,
  value = dup_values,
  repeat_time = dup_repeat_times
)

小提醒

  • 如果你的test_list是数据框中的一列,只需要把代码里的向量替换成列名(比如df$your_column)就行。
  • 要是你需要的是“累计出现次数(包含第一次)”,直接用repeat_count;如果要的是“重复的次数(从1开始算第一次重复)”,就用repeat_count - 1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:51:22