根据另一个数据框分配价值

时间:2019-07-09 06:52:37

标签: r

我想基于另一个数据框分配利润

DF1:

Item    From    Price    Discount   
 A     Delhi    100        .10      
 A     Mumbai   200        .10    
 A     Pune     150        .10     
 A     Nagpur   200        .10    

DF2:

Item      From     To
 A        Delhi    Mumbai
 A        Mumbai   Pune
 A        Mumbai   Nagpur

利润以价格*折扣

计算

在这里,我们在DF1中计算利润,并根据DF2中的关系将其添加到所连接城市的价格中。我们计算了德里的利润,它仅与孟买有关,因此将利润转换为孟买的价格。

但是,当我们计算孟买的利润时,它与Pune和Nagpur有关,因此需要对利润进行除法并加到Pune&Nagpur的价格上

有人可以帮我为此编写一个for循环吗?

输出:

Item    From    Price    Discount    Profit
 A     Delhi    100        .10         10
 A     Mumbai   200+10     .10         21
 A     Pune     150+10.5   .10         16
 A     Nagpur   200+10.5   .10         21

1 个答案:

答案 0 :(得分:1)

使用for循环的一种方法。感谢@Sotos和OP的详细说明。

#Initialize Profit column to 0
df1$Profit <- 0

for (i in seq_len(nrow(df1))) {
   #Check cities which are present in df2
   cities <- df2$To[df1$Item[i] == df2$Item & df1$From[i] == df2$From]
   inds <- df1$From %in% cities
   #Update the Price for matched cities
   if (any(inds))
     df1$Price[inds] <- df1$Price[inds] + 
                       (df1$Price[i] * df1$Discount[i]/length(cities))
   #Calculate Profit
   df1$Profit[i] <- df1$Price[i] * df1$Discount[i]
}

df1
#  Item   From Price Discount Profit
#1    A  Delhi 100.0      0.1  10.00
#2    A Mumbai 210.0      0.1  21.00
#3    A   Pune 160.5      0.1  16.05
#4    A Nagpur 210.5      0.1  21.05