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
}
或者,您可以编写一个只调用 median
或 quantile
的函数。
我尝试编写一个代码来执行一项任务:“编写一个函数 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
}
或者,您可以编写一个只调用 median
或 quantile
的函数。