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

R中使用dplyr多列分组汇总时如何按family字段去重

解决方案

首先明确原代码的两个可调整点:

  • 原数据集列名为小写family、inc,代码中大写开头的Family、Inc会触发列不存在报错,需要先统一列名大小写。
  • dplyr中summarise执行后会默认丢弃最后一层分组,你按family+type分组汇总后,剩余的分组层级为family,此时mutate计算的sum(Transaction_count)就是每个family的总交易数,符合占比计算逻辑。

如果你要每个family仅保留唯一一行,根据统计需求可以选择以下两种方案:

方案1:仅保留family维度的总统计量

如果不需要保留type维度的细分数据,直接按family单字段分组汇总即可:

library(dplyr)
df <- df1 %>%
  group_by(family) %>%
  summarise(
    Transaction_count = n(),
    Face_value = sum(inc)
  )

输出结果每个family对应唯一一行,包含该family的总交易数、总金额。

方案2:保留type细分信息,转宽表实现单family一行

如果需要同时保留各type的交易数、占比、金额信息,可以用宽表格式把type的细分值转为列存储:

library(dplyr)
library(tidyr)

# 先按双维度分组统计
df_temp <- df1 %>%
  group_by(family, type) %>%
  summarise(
    Transaction_count = n(),
    Face_value = sum(inc),
    .groups = "drop_last" # 显式指定仅丢弃type层级分组,避免dplyr版本差异导致的警告
  ) %>%
  mutate(
    total_count = sum(Transaction_count),
    total_facevalue = sum(Face_value),
    Pct = Transaction_count / total_count
  )

# 转宽表,每个family仅保留一行
df <- df_temp %>%
  pivot_wider(
    id_cols = c(family, total_count, total_facevalue),
    names_from = type,
    values_from = c(Transaction_count, Face_value, Pct),
    values_fill = 0 # 不存在的type对应统计值填0
  )

内容的提问来源于stack exchange,提问作者Yomi.blaze93

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:48:04