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

如何在R中按项目分组计算用户贡献值的百分位排名

在R中按项目分组计算用户贡献值的百分位排名

我有如下结构的数据集(实际包含更多条目),需要新增一列Column D,用来计算每个用户在所属项目中基于贡献值的百分位排名。比如user2参与了3个项目,他在Project2的贡献远高于Project3和其他项目,新列要能展示该用户在各项目中的不同百分位排名。我试过group_by %>% summarize的各种写法都没成功,也不熟悉自定义函数,希望找现成的实现方法。

数据集结构示例:

UserProjectNameContributions
user1Project11
user2Project11
user2Project22937533
user2Project315
user3Project48
user4Project32
user5Project6277
user5Project22

解决方案

用dplyr包就能轻松实现,核心是按项目分组后,用内置的percent_rank()函数计算百分位排名,不用写自定义函数。步骤如下:

  1. 先加载dplyr包(如果没安装先运行install.packages("dplyr"))
  2. 按ProjectName分组,然后用mutate新增列,计算每个用户在对应项目中的贡献值百分位排名

完整代码示例

# 安装并加载dplyr包
if (!require(dplyr)) {
  install.packages("dplyr")
  library(dplyr)
}

# 创建示例数据集
df <- tibble(
  User = c("user1", "user2", "user2", "user2", "user3", "user4", "user5", "user5"),
  ProjectName = c("Project1", "Project1", "Project2", "Project3", "Project4", "Project3", "Project6", "Project2"),
  Contributions = c(1, 1, 2937533, 15, 8, 2, 277, 2)
)

# 新增Column D:按项目分组计算百分位排名(结果为0-100的百分比)
df <- df %>%
  group_by(ProjectName) %>%
  mutate(`Column D` = percent_rank(Contributions) * 100) %>%
  ungroup()

# 查看结果
print(df)

代码解释

  • group_by(ProjectName):把数据按项目分组,确保每个项目内的排名独立计算
  • percent_rank(Contributions):计算当前行的贡献值在所在项目中的相对百分位(返回0到1之间的数值),乘以100后转换成百分比形式
  • ungroup():取消分组,避免后续操作受分组影响

运行后你会看到:

  • user2在Project2的Column D是100(因为他的贡献是该项目最高),在Project3是100,在Project1是50(和user1贡献相同,平分百分位)
  • user5在Project2的Column D是0,在Project6是100(该项目只有他一个人)

可选:获取排名位次而非百分比

如果你想要的是排名位次(比如第1名、第2名)而不是百分比,可以把percent_rank(Contributions)*100换成rank(desc(Contributions), ties.method = "average"),这样会得到每个用户在项目中的排名,相同贡献的用户会得到平均排名。

替换后的代码:

df <- df %>%
  group_by(ProjectName) %>%
  mutate(`Column D` = rank(desc(Contributions), ties.method = "average")) %>%
  ungroup()

这样user1和user2在Project1的排名都是1.5,user2在Project2是第1名,user5是第2名。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 11:47:31