首页 > 解决方案 > Groupby 一列然后总结另一个值列并计算行数,然后计算 R 中每个列的百分比

问题描述

给定一个小数据集如下:

df <- structure(list(id = 1:8, type = structure(c(1L, 1L, 1L, 2L, 2L, 
3L, 3L, 3L), .Label = c("a", "b", "c"), class = "factor"), values = c(360000L, 
331715L, 260000L, 164900L, NA, 120000L, 331238L, 629861L)), class = "data.frame", row.names = c(NA, 
-8L))

在此处输入图像描述

我如何分组type并总结values和计算条目数,然后为每个计算value_percent和?number_percenttype

预期的结果将是这样的:

在此处输入图像描述

提前感谢您的帮助。

更新:

value_percent1对于@Karthik S 的解决方案,如果数据集中的中文字符全部变为s。

df <- structure(list(物业类型 = structure(c(1L, 3L, 2L, 1L, 3L, 
4L, 3L, 3L, 4L, 4L, 4L, 3L), .Label = c("商业/零售", "数据中心", 
"写字楼&quot;, "综合体&quot;), class = "factor"), 成交总价.万元. = c(360000L, 
331715L, 260000L, 164900L, NA, 120000L, 331238L, 629861L, 68800L, 
47600L, 804600L, 450000L)), class = "data.frame", row.names = c(NA, 
-12L))

代码:

df %>% 
  group_by(物业类型) %>% 
  dplyr::summarise(总额占比 = sum(成交总价.万元., na.rm = T)/sum(成交总价.万元., na.rm = T), 笔数占比 = n()/nrow(df))

出去:

在此处输入图像描述

标签: rdplyr

解决方案


你可以做 :

library(dplyr)

df %>%
  group_by(type) %>%
  summarise(value_percent = sum(values, na.rm = TRUE),
            count_percent = n()) %>%
  mutate(across(ends_with('percent'), prop.table))

#  type  value_percent count_percent
#  <fct>         <dbl>         <dbl>
#1 a            0.433          0.375
#2 b            0.0750         0.25 
#3 c            0.492          0.375

推荐阅读