【问题标题】:Using apply functions使用应用函数
【发布时间】: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 中编写不必要的循环不会让你走得太远。

标签: r apply


【解决方案1】:

不需要应用函数。您可以只使用矢量化方法:

Data$Margin <- Data$Qty * (Data$Sales.Price - Data$COGS)

【讨论】:

  • 感谢这么简单的回答:)
猜你喜欢
  • 1970-01-01
  • 2019-08-20
  • 2018-10-01
  • 2017-04-04
  • 2016-01-22
  • 2018-10-31
  • 1970-01-01
  • 1970-01-01
  • 2022-11-13
相关资源
最近更新 更多