【问题标题】:median in data.table R数据表中的中位数 R
【发布时间】:2020-10-05 17:41:33
【问题描述】:

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

应该使用 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)
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]

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

【问题讨论】:

    标签: r data.table median


    【解决方案1】:

    手动手动:

    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 的函数。

    【讨论】:

    • 谢谢!我做了这个代码:purchases.median.order.price 0][, sum(price*quantity), by=ordernumber][,median(V1)] }
    • 我的荣幸。您可以跳过第一个括号,直接子集purchases[quantity &gt; 0, sum(price * quantity), by = ordernumber][, median(V1)]
    猜你喜欢
    • 1970-01-01
    • 2014-06-06
    • 2020-08-20
    • 2021-12-20
    • 2015-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多