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

R语言dplyr工具按客户统计负额票据数量问题求助

用dplyr按客户统计TIC_TOTAL_TCC < 0的票据数量

嘿,我来帮你捋捋这个问题~你的代码结果不对主要有两个小问题:一是分组的时候多带了IDTICKET,导致最终结果是按「客户+票据」的组合统计,而不是按客户汇总;二是sum()里的语法写错啦,TIC_TOTALTTC[TIC_TOTALTTC] < 0这种索引方式是错误的。

下面根据你的数据结构给出两种解决方案:

情况1:一行数据对应一张票据(每个IDTICKET只出现一次)

如果你的数据里每个IDTICKET唯一对应一行,那直接按IDCLIENT分组,统计TIC_TOTAL_TCC < 0的行数就行:

library(dplyr)

nb_ticket_remb <- df %>%
  group_by(IDCLIENT) %>%
  summarise(
    RemboursementTicket = sum(TIC_TOTAL_TCC < 0, na.rm = TRUE)
  )
  • TIC_TOTAL_TCC < 0会生成一个逻辑向量,sum()会把TRUE当作1、FALSE当作0,直接统计符合条件的数量
  • 加na.rm = TRUE是为了处理数据中可能存在的NA值,避免结果变成NA

情况2:一张票据对应多行数据(同一个IDTICKET出现多次)

如果同一个IDTICKET有多行记录,你需要先判断这张票据是否至少有一条记录的TIC_TOTAL_TCC < 0,再按客户统计这样的票据数量:

library(dplyr)

nb_ticket_remb <- df %>%
  # 先按客户+票据分组,判断该票据是否有负数
  group_by(IDCLIENT, IDTICKET) %>%
  summarise(has_negative = any(TIC_TOTAL_TCC < 0, na.rm = TRUE), .groups = "drop_last") %>%
  # 再按客户汇总符合条件的票据数量
  summarise(RemboursementTicket = sum(has_negative))
  • any()用来判断当前票据下是否存在至少一个负数记录
  • .groups = "drop_last"会去掉最内层的IDTICKET分组,只保留IDCLIENT的分组,方便后续汇总

你可以根据自己的实际数据结构选对应的方法~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:10:25