我正在尝试使用它来模拟网络中一组卖家的定价准确性。
我的数据集(定价)如下所示:
transactionID sellerID expectedprice actualprice pricediff
1 1001 251 200 210 10
2 1002 101 200 300 100
3 1003 251 400 190 -210
4 1004 251 300 300 0
5 1005 101 250 250 0
6 1006 350 200 210 10
7 1007 401 400 400 0
注意:我不是在尝试进行标准偏差计算,因为我不是要计算均值的方差,而是根据预期值列的变化,这取决于交易。
我很乐意使用以下方法插入新列以从表中获得预期值的绝对差异:
pricing$diffabs <- abs(pricing$pricediff)
导致以下结果:
transactionID sellerID expectedprice actualprice pricediff diffabs
1001 251 200 210 10 10
1002 101 200 300 100 100
1003 251 400 190 -210 210
1004 251 300 300 0 0
1005 101 250 250 0 0
1006 350 200 210 10 10
1007 401 400 400 0 0
然后如何计算每个卖家的差异分数:
在“卖家ID”中分组的abs(pricing$diff)
之和除以数据中“sellerID”的观察次数(次数)。
我期望的输出如下:
SellerID Count Sumofdiffabs Variation
251 3 220 73.33333333
101 2 100 50
350 1 10 10
401 1 0 0
处理聚合级别R的差异的其他帮助主题似乎只处理标准偏差或均值的差异,例如:
Calculating grouped variance from a frequency table in R
当使用标准偏差之类的简单函数时,聚合函数对我来说效果很好,但在我必须弄清楚如何将计数插入函数的地方。什么让我失望,是因为我的方差是偏离平均值的偏差,而是来自我表中的列结果。
答案 0 :(得分:0)
m = matrix(c(1001,251,200,210,10,1002,101,200,300,100,1003,251,400,190,-210,1004,251,300,300,0,1005,101,250,250,0,1006,350,200,210,10,1007,401,400,400,0),ncol = 5,nrow=7,byrow=TRUE)
colnames(m) = c("transactionID","sellerID","expectedprice","actualprice","pricediff")
pricing = as.data.frame(m)
pricing$diffabs <- abs(pricing$pricediff)
pricing
transactionID sellerID expectedprice actualprice pricediff diffabs
1001 251 200 210 10 10
1002 101 200 300 100 100
1003 251 400 190 -210 210
1004 251 300 300 0 0
1005 101 250 250 0 0
1006 350 200 210 10 10
1007 401 400 400 0 0
所以结果如下:
library(data.table)
pricing = as.data.table(pricing)
f <- function(x) {list( Count=length(x))}
result <- pricing[ , c(f(diffabs), Sumofdiffabs=sum(diffabs),Variation=mean(diffabs)),by=sellerID]
result
sellerID Count Sumofdiffabs Variation
1: 251 3 220 73.33333
2: 101 2 100 50.00000
3: 350 1 10 10.00000
4: 401 1 0 0.00000