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

R语言按另一列条件处理重复行 不删除数据并重命名重复名称

R语言实现同分组按指定列排序后加序号后缀

方案1:tidyverse/dplyr实现(推荐,不改变原数据行顺序)

你可以直接基于dplyr的分组排名逻辑实现,无需打乱原数据的行顺序:

library(dplyr)

data <- data %>%
  # 按名称分组
  group_by(name) %>%
  # 分组内按nb_participants降序排名,NA值默认排最后,相同值按原出现顺序定先后
  mutate(rank = rank(desc(nb_participants), na.last = TRUE, ties.method = "first")) %>%
  # 按你需要的格式拼接新名称
  mutate(name = paste0(name, " 2-", rank)) %>%
  # 取消分组,删除临时排名列
  ungroup() %>%
  select(-rank)

运行后输出结果和你给出的期望格式完全一致。

方案2:基础R实现

如果你不想加载第三方包,可以用基础R的split + lapply逻辑实现:

# 先把name转成字符型避免因子报错
data$name <- as.character(data$name)
# 按name分组处理
data_processed <- do.call(rbind, lapply(split(data, data$name), function(df) {
  df$rank <- rank(desc(df$nb_participants), na.last = TRUE, ties.method = "first")
  df$name <- paste0(df$name, " 2-", df$rank)
  return(df[, setdiff(colnames(df), "rank")])
}))
# 恢复原数据的行顺序(split会打乱原顺序,不需要的话可以去掉这行)
data <- data_processed[as.character(1:nrow(data)), ]

参数说明

  • ties.method = "first":如果同一分组内出现相同的nb_participants取值,按数据原有行的先后顺序排名,避免出现小数排名
  • na.last = TRUE:保证所有nb_participants为NA的行,序号排在分组的最后

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 05:15:03