R语言中统计电商订单产品订购次数及解决报错问题
解决产品订购次数统计问题及报错分析
咱们先弄明白你为啥会遇到这个错误:
你用mutate(prods = count(product_id))的时候,犯了两个小问题:
count()不能放在mutate()里用:mutate()是给数据框的每一行新增列,而count()是用来做分组汇总的——它会直接返回一个包含分组和计数的新数据框,不是给每行生成单个值,两者的逻辑完全不匹配。- 因子类型的参数问题:你的
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
相关产品推荐
相关产品推荐

