如何用R对单户住宅销售数据做汇总、计数并按均价排序?
问题解决思路与代码
错误原因分析
- 第一条代码报错:
group_by()的参数只能是列名,不能嵌套distinct()函数。distinct()是用来筛选唯一行的独立操作,不是分组参数,因此触发类型错误。 - 第二条代码无效:同时按
zip_code和sold_price分组,相当于把「每个邮编+每个成交价」作为一个分组。如果你的数据里每条销售记录的价格都是唯一的,分组后行数和原数据完全一致,等于没做聚合统计。
正确实现代码
用dplyr链式操作,先按邮编分组,再聚合计算核心指标,最后排序并生成排名:
library(dplyr) # 按邮编统计并排序排名 sales_summary <- sales %>% group_by(zip_code) %>% summarize( sales_count = n(), # 销售套数 total_sales = sum(sold_price, na.rm = TRUE), # 总销售额(忽略缺失值) avg_price = total_sales / sales_count # 计算均价 # 也可以直接用 mean(sold_price, na.rm = TRUE) 算均价,结果一致 ) %>% ungroup() %>% # 取消分组状态,避免后续操作受分组限制 arrange(desc(avg_price)) %>% # 按均价降序排列 mutate(zip_rank = row_number()) # 生成排名(相同均价按顺序排;要同均价同排名可改用 rank(desc(avg_price), ties.method = "min"))
代码说明
group_by(zip_code):仅以邮编作为分组依据,确保每个邮编对应一个独立统计组summarize():对每个分组计算聚合值,n()返回组内行数(即销售套数),sum()计算总销售额ungroup():必须取消分组,否则后续的排序、排名操作可能仅在分组内生效arrange(desc(avg_price)):将均价最高的邮编排在最前列mutate(zip_rank = row_number()):生成连续排名,可根据需求调整排名规则
内容的提问来源于stack exchange,提问作者Sheena Puckett
相关产品推荐
相关产品推荐

