R 访问上一行的内容

R 访问上一行的内容,r,R,您好,我想根据以下逻辑为Volume列生成值 如果类型为销售,则前一行[数量]-当前行[数量] 如果类型为“购买”,则上一行[数量]+当前行[数量]尝试以下操作: df=data.frame(Type=c('Sell','Buy','Sell','Buy'), Date=c('2015-03-24','2014-12-04', '2014-11-07', '2014-05-22'), Quantity=c(2000,600,50,500

您好,我想根据以下逻辑为Volume列生成值

如果类型为销售,则前一行[数量]-当前行[数量]

如果类型为“购买”,则上一行[数量]+当前行[数量]

尝试以下操作:

df=data.frame(Type=c('Sell','Buy','Sell','Buy'), 
              Date=c('2015-03-24','2014-12-04', '2014-11-07', '2014-05-22'), 
              Quantity=c(2000,600,50,500) ) 

Type        Date    Quantity  Volume
Sell    2015-03-24  2000      1400
Buy     2014-12-04  600       600
Sell    2014-05-22  500       0
Buy     2014-03-28  500       500

也许您想先订购data.frame,只是为了确定吗?

您可能会使用。600-2000=1400如何?从最早的日期开始,即2014-03-28,类型为Buy,没有前一行,因此它是500。对于2014-05-22,类型为Sell,因此当前[Quantity]-前一行[Vol]=500-500=0。看看第一行的卷,前一行的卷是600,卖出2000,不是应该是-1400吗?嗨,Psidom,从底部扫描,即最早的日期。谢谢Rodrigo。想知道可能有一些短的R风格的代码来做同样的事情吗?@AndroidBeginner。但我认为好的编程技术对任何人来说都更容易理解。“不客气,”安德鲁贝金纳我第一次误解了你的问题。是现在吗?
df=data.frame(Type=c('Sell','Buy','Sell','Buy'), 
              Date=c('2015-03-24','2014-12-04', '2014-11-07', '2014-05-22'), 
              Quantity=c(2000,600,50,500) ) 
df

  Type       Date Quantity
1 Sell 2015-03-24     2000
2  Buy 2014-12-04      600
3 Sell 2014-11-07       50
4  Buy 2014-05-22      500

df$Volume <- df$Quantity[nrow(df)]
for (i in (nrow(df)-1):1) {
  if (df$Type[i] == 'Sell') {
    df$Volume[i] <- df$Volume[i+1] - df$Quantity[i]
  } else { # Buy
    df$Volume[i] <- df$Volume[i+1] + df$Quantity[i]
  }
}
df

  Type       Date Quantity Volume
1 Sell 2015-03-24     2000   -950
2  Buy 2014-12-04      600   1050
3 Sell 2014-11-07       50    450
4  Buy 2014-05-22      500    500