如何用R的dplyr包匹配各国第10位满意度对应的企业名称?
解决方法:用dplyr获取每个国家满意度排名第10的企业
你的问题出在两个关键点:
nth()的order_by参数错误——你需要按满意度分数降序排序,而非Country,这样才能定位到第10高的分数summarise()是聚合函数,仅能输出分组汇总值,无法直接保留对应的企业名称,得换用可保留整行数据的函数
下面是两种实用的解决方案:
方法1:用slice()提取指定行
先按国家分组,每组内按满意度降序排序,再提取第10行(若组内企业不足10个,会自动返回NA):
ordered_needed_data_ha %>% group_by(Country) %>% arrange(desc(`Satisfaction Score`), .by_group = TRUE) %>% slice(10) %>% rename(value = `Satisfaction Score`) %>% select(Country, Company, value)
方法2:用row_number()标记排名后筛选
先给每个国家内的企业按满意度降序标注排名,再筛选排名为10的行:
ordered_needed_data_ha %>% group_by(Country) %>% mutate(rank = row_number(desc(`Satisfaction Score`))) %>% filter(rank == 10) %>% rename(value = `Satisfaction Score`) %>% select(Country, Company, value)
补充说明
.by_group = TRUE确保arrange()是在每个国家分组内部完成排序- 两种方法都会自动处理企业数量不足10的国家(比如示例中的AL),返回对应NA值
- 如果存在多个企业满意度分数相同的情况,
row_number()会给它们分配不同排名;若想让同分企业共享排名,可替换为min_rank()或dense_rank(),按需调整即可
内容的提问来源于stack exchange,提问作者Miszka_R
相关产品推荐
相关产品推荐

