【发布时间】:2013-07-08 07:02:31
【问题描述】:
这是我的单个客户的客户订单数据:
order_no customer_id product amount order_total
23 1 A 100 100
24 1 A 100 300
24 1 B 100 300
24 1 C 100 300
25 1 B 100 100
26 1 A 100 200
26 1 B 100 200
我想在一个新列中计算每个客户的平均订单大小,所以对于这个客户,它将是 175 = (100 + 300 + 100 + 200) / 4:
order_no customer_id amount order_total avg_order_size
23 1 100 100 175
24 1 100 300 175
24 1 100 300 175
24 1 100 300 175
25 1 100 100 175
26 1 100 200 175
26 1 100 200 175
我尝试过使用它的某个版本,但没有成功:
customer_stats <- data.table(customer_stats)[, avg_order_size := mean(order_total), by=list(order_no, customer_id)]
我真正需要做的是从每个 order_no 中只选择一行,比如 mean 之类的 order_no[1] 使用 by=(customer_id) 吗?如果有一种方法可以一步完成并跳过创建order_total,那就更好了。
【问题讨论】:
-
您尝试
customer_stats[, avg_order_size := mean(order_total), by=list(order_no, customer_id)]使用:=是否已经执行分配,因此无需额外分配您的data.table -
@dickoa,如果您同时按
order_no和customer_id分组,那么您将采用100, 300, 100, 200的平均值单独(这将结束相同的值)。 -
@Arun 是的,你是对的
-
@Bryan,我认为您的问题已得到解答。很高兴能回答这个问题。
标签: r aggregate data.table