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

无法计算列百分比?求R语言dplyr代码解决方案

问题原因

你遇到的问题是因为分组后sum(sale_vol)的作用范围被限制在当前分组内:group_by(Property Type)执行后,每组的sale_vol是该类房产的数量,而sum(sale_vol)只会计算当前组的总和(也就是等于该组的sale_vol),所以最终每组的百分比都会是100%。

修正方案

以下是几种可行的修正代码:

方法1:先计算全局总销量再关联

sale <- read_csv("re_sale.csv")

# 先筛选出有效数据并计算总数量
total_valid <- nrow(filter(sale, !is.na(`Property Type`)))

sale %>% 
  filter(!is.na(`Property Type`)) %>%  
  group_by(`Property Type`) %>% 
  summarize(sale_vol = n()) %>%
  mutate(percent = round(sale_vol / total_valid * 100, 2)) # 保留两位小数更直观

方法2:分组统计后取消分组再计算百分比

sale <- read_csv("re_sale.csv")

sale %>% 
  filter(!is.na(`Property Type`)) %>%  
  group_by(`Property Type`) %>% 
  summarize(sale_vol = n()) %>%
  ungroup() %>% # 取消分组,让sum作用于所有组的总和
  mutate(percent = round(sale_vol / sum(sale_vol) * 100, 2))

方法3:用count简化代码

dplyr的count函数可以直接完成分组计数,再计算百分比:

sale <- read_csv("re_sale.csv")

sale %>% 
  filter(!is.na(`Property Type`)) %>%
  count(`Property Type`, name = "sale_vol") %>%
  mutate(percent = round(sale_vol / sum(sale_vol) * 100, 2))

以上三种方法都能得到各组房产销量占总有效销量的百分比,你可以根据习惯选择其中一种。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 23:15:54