data.table R 中的中位数

median in data.table R

我尝试编写一个代码来执行一项任务:“编写一个函数 purchases.median.order.price,它有一个参数:购买,returns 订单价值中值(数量)。

应该使用 data.table 进行分组。购买商品数量为非正数 (returns) 的记录将被忽略。

请注意,一条记录可以对应多条记录——订单号相同的“仓位”,在计算订单金额时,需要考虑用户同时购买了多件同类型商品的情况(他们的数量以数量表示)。

sample.purchases <- data.table(price = c(100000, 6000, 7000, 5000000),
                               ordernumber = c(1,2,2,3),
                               quantity = c(1,2,1,-1),
                               product_id = 1:4)
purchases.median.order.price(sample.purchases)
# 59500

我写:

library(data.table)
sample.purchases <- data.table(price = c(100000, 6000, 7000, 5000000),
                               ordernumber = c(1,2,2,3),
                               quantity = c(1,2,1,-1),
                               product_id = 1:4)

sample.purchases[quantity>0][, price*quantity, by=ordernumber]

但这是错误的。我不知道我应该如何找出中位数?

手动手动:

purchases.median.order.price <- function(x){
  x <- order(x);
  n <- length(x) - 1;
  n2 <- (n/2) + 1; 
  sum(x[c(floor(n2), ceiling(n2))])/2
}

或者,您可以编写一个只调用 medianquantile 的函数。