【发布时间】:2016-01-17 07:25:07
【问题描述】:
我有一个包含这些列的数据框
Qty Sales Price COGS
1 500 200
2 900 400
3 1000 300
1 300 150
我想计算每一行的利润。因此,对于第 1 行,如果销售价格 - COGS (500-200) 利润为 300。 一个条件是,如果 qty 大于 1,则 QtySales Prce-QtyCOGS= 毛利润。
我用循环
for (i in 1:nrow(Data)) {
if(Data[i,"Qty"]<=1) {Data[i,"Margin"]<-Data[i,"Sales.Price"]-Data[i,"COGS"]}
if(Data[i,"Qty"]>=1){Data[i,"Margin"]<-Data[i,"Qty" * "Sales.Price"]-Data[i,"Qty * "COGS"]}
}
But
我想使用应用功能
并在数据框中返回我的答案,因为 Margin 在我当前的数据框中作为向量而不是列表或矩阵附加。
Qty Sales Price COGS Margin
1 500 200 300
2 900 400 1000
3 1000 300 2100
1 300 150 150
【问题讨论】:
-
请阅读
?Arithmetic然后?S4groupGeneric,R 中的许多函数都是矢量化的(不仅在向量上,而且在矩阵甚至数据帧上)。在apply而不是for中编写不必要的循环不会让你走得太远。