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

R语言中统计电商订单产品订购次数及解决报错问题

解决产品订购次数统计问题及报错分析

咱们先弄明白你为啥会遇到这个错误:
你用mutate(prods = count(product_id))的时候,犯了两个小问题:

  1. count()不能放在mutate()里用:mutate()是给数据框的每一行新增列,而count()是用来做分组汇总的——它会直接返回一个包含分组和计数的新数据框,不是给每行生成单个值,两者的逻辑完全不匹配。
  2. 因子类型的参数问题:你的product_id是因子类型,直接把单个因子向量传给count(),它没办法识别分组规则,所以就抛出了“没有适用于factor类对象的groups方法”的错误。

接下来给你几个可行的实现方法,都能直接得到包含product_id和Order_Count的目标表格:

方法一:dplyr标准分组汇总(最推荐,逻辑清晰)

用group_by()先按产品ID分组,再用summarize()统计每组的行数(也就是订购次数):

# 只保留product_id和Order_Count
product_order_counts <- temp %>%
  group_by(product_id) %>%
  summarize(Order_Count = n()) %>%
  ungroup() # 可选,取消分组状态,方便后续操作

# 如果需要同时显示product_name,就把它也加入分组:
product_order_counts <- temp %>%
  group_by(product_id, product_name) %>%
  summarize(Order_Count = n()) %>%
  ungroup()

方法二:直接用dplyr的count()简写

其实count()本身就是group_by() + summarize(n())的快捷写法,你直接对整个数据框用就行,不用嵌套在mutate()里:

# 指定计数列名为Order_Count
product_order_counts <- temp %>%
  count(product_id, name = "Order_Count")

# 带product_name的版本:
product_order_counts <- temp %>%
  count(product_id, product_name, name = "Order_Count")

方法三:基础R的table()方法

如果你更习惯用基础R工具,也可以这么做:

# 先生成频数统计表
order_freq_table <- table(temp$product_id)
# 转换为数据框并指定计数列名
product_order_counts <- as.data.frame(order_freq_table, responseName = "Order_Count")
# 把默认的列名Var1改成product_id
colnames(product_order_counts)[1] <- "product_id"

额外小技巧:按订购次数排序

如果想直接看到最受欢迎的产品(从高到低排序),在dplyr的代码末尾加个arrange()就行:

product_order_counts <- temp %>%
  count(product_id, name = "Order_Count") %>%
  arrange(desc(Order_Count))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:22:29