对于一个简单的数据框:
client_id<-c("111","111","111","112","113","113","114")
transactions<-c(1,2,2,2,3,17,100)
transactions_sum<-c(5,5,5,2,20,20,100) ##precalculated sums of transaction counts for each client_id
segment<-c("low","low","low","low","low","low","high")
test<-data.frame(client_id,transactions,transactions_sum,segment)
client_id transactions transactions_sum segment
1 111 1 5 low
2 111 2 5 low
3 111 2 5 low
4 112 2 2 low
5 113 3 20 low
6 113 17 20 low
7 114 100 100 high
我正在尝试按段聚合并计算段均值。
我期待以下结果:
segment transactions_mean
1 low 9
2 high 100
由于计算平均值应考虑重复的 client_ids,我们应该将每个段的单个事务计数相加(低段为 1+2+2+2+3+17)并除以唯一的 client_ids(低段为 3),得到 27 /3 = 9 用于低段。为每个 client_id 使用预先计算的总和:(5+2+20)/3 = 9
但是,当我尝试对这些数据运行“dcast”或“聚合”时,我得到了错误的数字,因为显然他们将每一行视为一个独特的观察:
dcast(test, segment ~ ., mean, value.var="transactions")
给
segment .
1 low 4.5
2 high 100.0
这有效地说明了它将每个段的事务计数相加(低段为 1+2+2+2+3+17)并除以每个段的观察数(低段为 6)而不是唯一的 client_ids。
在这种情况下,计算均值的正确方法是什么?