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

如何在R语言中识别数据中的并列人群组并进行相对排名?

在R中识别并列人群组并进行相对排名

可以实现,核心思路是基于多变量支配关系划分组:如果两个个体彼此都不满足「所有变量都≥对方且至少一个变量更大」,则归为同一组;组的排名由组间支配关系决定——若A组个体能支配B组个体,A组排名就高于B组。

具体实现步骤

  1. 加载并准备数据
df <- data.frame(
  person = c("person0", "person1", "person2", "person3", "person4", "person5", "person6"),
  var1 = c(11,10,5,2,1,0,0),
  var2 = c(11, 5, 10, 2,1,1,0),
  var3 = c(11, 10, 10, 2,0,1,0)
)
  1. 定义支配关系函数
    判断个体i是否支配个体j:i的所有变量都不小于j,且至少有一个变量严格大于j
dominates <- function(i, j, mat) {
  all(mat[i, ] >= mat[j, ]) && any(mat[i, ] > mat[j, ])
}
  1. 构建支配矩阵
    生成n×n矩阵,标记每个个体是否支配另一个个体
num_mat <- as.matrix(df[, -1])
n <- nrow(num_mat)
dom_mat <- matrix(FALSE, nrow = n, ncol = n)

for (i in 1:n) {
  for (j in 1:n) {
    if (i != j) {
      dom_mat[i, j] <- dominates(i, j, num_mat)
    }
  }
}
  1. 划分等价组
    把彼此不互相支配的个体归为同一组
groups <- list()
used <- rep(FALSE, n)

for (i in 1:n) {
  if (!used[i]) {
    # 找到与i等价的所有个体:既不被i支配,也不支配i
    group_members <- which(!dom_mat[i, ] & !dom_mat[, i])
    groups[[length(groups) + 1]] <- df$person[group_members]
    used[group_members] <- TRUE
  }
}
  1. 对组进行排名
    根据组间支配关系确定排名,支配其他组越多的组排名越高
# 计算组间支配关系
group_dom <- matrix(FALSE, nrow = length(groups), ncol = length(groups))
for (i in 1:length(groups)) {
  for (j in 1:length(groups)) {
    if (i != j) {
      i_idx <- which(df$person == groups[[i]][1])
      j_idx <- which(df$person == groups[[j]][1])
      group_dom[i, j] <- dominates(i_idx, j_idx, num_mat)
    }
  }
}

# 计算排名
rank_scores <- rowSums(group_dom)
group_ranks <- rank(-rank_scores, ties.method = "min")

# 整理最终结果
result <- data.frame(
  person = unlist(groups),
  group = rep(1:length(groups), sapply(groups, length)),
  rank = rep(group_ranks, sapply(groups, length))
)

print(result)

运行结果

person group rank
1 person0     1    1
2 person1     2    2
3 person2     2    2
4 person3     3    3
5 person4     4    4
6 person5     4    4
7 person6     5    5

这个结果完全匹配需求:person0单独为第1组(排名1),person1和person2为第2组(排名2),person3单独第3组(排名3),person4和person5为第4组(排名4),person6单独第5组(排名5)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 00:13:22