无需合并即可在R中引用V-lookup样式

时间:2018-07-31 15:22:27

标签: r vlookup

我有两个桌子。一种带有有关在不同网站上出售商品应支付的佣金信息的信息。我想为其创建售价的其他持有商品。

请同时查看两个表:

Channel <- c("DIRECT", "EBAY", "AMAZON")
Commission_percentage <- c(.1, .5, .4)
Min_commission <- c(0, 0, 2)
Processing <- c(0.05, 0.05, 0.03)

Commission_table <- as.data.frame(cbind(Channel, Commission_percentage, 
Min_commission, Processing))

上面的佣金表显示了每个网站的佣金百分比,但显示AMAZON将为每次销售收取2英镑的最低费用。它还显示了另一个%的付款处理费用。下表显示了5件将要出售的物品。它显示了网站以及以前为该商品支付的金额(费用)。

Item <- c("A1", "A2", "A3", "A4", "A5")
Cost <- c(10, 14, 18.85, 20, 5)    
Channel <- c("DIRECT", "EBAY", "AMAZON", "AMAZON", "AMAZON")

Price_table <- as.data.frame(cbind(Item, Cost, Channel))

我需要为Price_table创建一列,该列显示每个项目的“收支平衡”价格。我需要根据商品的销售渠道找到适用的佣金费用,对于亚马逊商品,如果标准佣金百分比计算得较低,则需要确保收取最低2英镑的佣金。比这个。

需要澄清的是,收支平衡价格必须是 费用+最高金额(佣金百分比*费用,最低佣金)  +(处理*(费用+最高(佣金百分比*费用,最低佣金)))

理想情况下,这需要提高内存效率,因为数据库非常大。因此,为什么我不只是考虑合并功能,一旦计算出价格就删除了多余的列。

非常感谢, 丹

1 个答案:

答案 0 :(得分:1)

让我们假设这些数据框是通过 right 方式构造的。

Price_table <- data.frame( Item, Cost, Channel)
Commission_table <- data.frame(Channel, Commission_percentage, Min_commission, Processing)

如果内存有限,那么也许可以使用for循环,该循环将不会继续复制大部分数据帧:

befunc <- function( Cost, 
                   Commission_percentage, 
                   Min_commission,   Processing ) {
            Cost +
            max(Commission_percentage * Cost, Min_commission) + 
            Processing*(Cost + 
                              max(Commission_percentage * Cost, Min_commission))}

BE <- numeric(length(Price_table[['Channel']]))  #pre-allocation

 for ( Ch in seq_along(Price_table[['Channel']]) ){ 
    Cost =   Price_table[Ch, "Cost"]
    Chan <-  Price_table[Ch, "Channel"]; 
    CommPct <- Commission_table[ match(Chan,Commision_table[["Channel"]]), "Commission_percentage"]
    MinComm <- Commission_table[ match(Chan,Commision_table[["Channel"]]), "Min_commission"]
    Proc <-    Commission_table[ match(Chan,Commision_table[["Channel"]]), "Processing"]

 BE[Ch] <- befunc( Cost, CommPct, MinComm, Proc) }

这应该允许在(或如果)内存有限时进行垃圾收集。