我想基于另一个数据框分配利润
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
答案 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