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

R语言:对用户工单统计结果排序、添加占比及求和的技术求助

R语言工单统计需求解决方案

完整代码(基于dplyr+janitor实现所有需求)

library(dplyr)
library(janitor)

# 一站式完成筛选、统计、排序、百分比计算、添加总计行
data_df_2 <- data %>%
  filter(q_1 == '4') %>%
  count(ticket_holder_username, name = "ticket_count") %>%
  arrange(desc(ticket_count)) %>%
  mutate(percentage = round(ticket_count / sum(ticket_count) * 100, 2)) %>%
  adorn_totals("row")

分需求解释

  1. 按频次排序
    用arrange(desc(ticket_count))实现降序排序,这里的ticket_count是自定义的计数列名(替代默认的n,更直观)。链式操作确保数据始终是标准data.frame,不会出现你之前遇到的is.data.frame(df) is not true错误——之前的问题大概率是count时传入字符串列名的方式不对,直接用裸列名(不带引号)是dplyr的标准用法。

  2. 新增工单占比列
    通过mutate计算百分比:ticket_count / sum(ticket_count) * 100,用round(..., 2)保留2位小数,方便查看。sum(ticket_count)会自动计算当前筛选后总工单的数量。

  3. 底部显示计数总和
    推荐用janitor包的adorn_totals("row"),它会自动在结果底部添加一行Total,并计算计数列的总和,百分比列自动设为100%。如果不想额外装包,也可以手动添加总计行:

    # 手动添加总计行(无需janitor)
    total_row <- tibble(ticket_holder_username = "Total",
                        ticket_count = sum(data_df_2$ticket_count),
                        percentage = 100)
    data_df_2 <- bind_rows(data_df_2, total_row)
    

关于你之前的错误说明

你用arrange(desc())报错,是因为count(data2, "ticket_holder_username")的写法不符合dplyr的规范——传入字符串列名时需要用.all_of()包裹(比如count(data2, .all_of("ticket_holder_username"))),否则生成的对象可能不是标准data.frame。改用链式操作直接引用裸列名,就能彻底避免这类问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 02:10:31