如何基于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
相关产品推荐
相关产品推荐

