R语言如何按变量自定义选TOP10行并强制保留指定条目
解决方案
在原有代码基础上调整排名逻辑即可:排除需要强制保留的型号A,仅对其余型号按销售额降序取TOP9,将型号A固定在第10位,剩余所有型号汇总为Others,修改后的完整代码如下:
df <- data.frame (model = c("A","B","C","D","E","F","G","H","I","J","K","L","M","N"), sale = c(100,300,140,456,345,456,456,780,40,560,560,456,350,500), cost = c(1340,330,440,443,365,437,478,700,30,460,160,456,650,100)) # 输出结构:非A型号销售额TOP9 + 强制保留的型号A + Others汇总 order <- df %>% type.convert(as.is = TRUE) %>% mutate( # 非A型号按销售额降序计算排名,型号A固定占位第10位 pos = ifelse(model == "A", 10, row_number(desc(sale[model != "A"]))[match(model, model[model != "A"])]), # 非A型号排名超出前9的统一归为Others,型号A保留原名称 model = ifelse(model != "A" & pos > 9, 'Others', model), # Others类别统一固定在第11位 pos = ifelse(model == 'Others', 11, pos) ) %>% group_by(model, pos) %>% summarise(cost= sum(cost), sale= sum(sale), .groups = 'drop') %>% arrange(pos)
运行代码后输出结构完全符合要求:非A型号按销售额降序展示前9位,型号A固定在第10位,剩余所有型号汇总为Others在第11位展示。如果后续需要强制保留其他型号,只需修改判断条件里的model == "A"为对应型号即可,逻辑通用。
内容的提问来源于stack exchange,提问作者user18937485
相关产品推荐
相关产品推荐

