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

如何基于Type分组的Percentage前10条件为DataFrame添加新列?

解决方法

你需要用窗口函数在分组后给每行标记排名,再通过条件判断生成新列,这样就能保留全量数据:

library(dplyr)

# 生成新列,保留所有行
df <- df %>%
  group_by(Type) %>%
  mutate(
    # 按Percentage降序生成组内排名,row_number确保严格取前10行(含并列时只取前10个条目)
    rank_percent = row_number(desc(Percentage)),
    # 根据排名赋值:前10行取Id,其余为"Unknown"
    New_Column = ifelse(rank_percent <= 10, as.character(Id), "Unknown")
  ) %>%
  ungroup() # 取消分组(可选,根据后续操作需求决定)

关于并列情况的补充:

  • 如果你希望所有Percentage值进入前10的行都被选中(即使数量超过10),可以把row_number换成dense_rank:
    rank_percent = dense_rank(desc(Percentage))
    
  • 如果你想让并列值获得相同排名,但只取到第10名的位置(比如第10名有3个并列,这3个都会被选中),用min_rank:
    rank_percent = min_rank(desc(Percentage))
    

之前用slice_max是直接过滤出前10行,而mutate是在原数据集上添加计算列,不会丢失任何行数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 11:03:19