Распределить значение на основе другого фрейма данных - PullRequest
0 голосов
/ 09 июля 2019

Я хотел бы распределить прибыль на основе другого кадра данных

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 нам нужно добавить его в цену подключенного города. Мы рассчитали прибыль для Дели, и она связана только с Мумбаи, поэтому перенесите прибыль в цену Мумбаи.

Но когда мы рассчитали прибыль для Мумбаи, она связана с Пуна и Нагпуром, поэтому прибыль нужно разделить и добавить к цене Пуна и Нагпур

Может кто-нибудь помочь мне написать цикл 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 Ответ

1 голос
/ 09 июля 2019

В одну сторону, используя 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...