2017-03-10 76 views
0
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 

喜的內容,我想如果類型是賣那麼前一行[音量]生成基於以下邏輯訪問前一行

卷列值 - 當前行[數量]

如果類型是賣那麼前一行[音量] +當前行[數量]

+0

您可以使用['lag'](https://stat.ethz.ch/R-manual/R-devel/library/stats/html/lag.html)。 – r2evans

+0

'600 - 2000 = 1400'如何? – Psidom

+0

從最早的日期開始即2014-03-28類型是Buy,並且沒有前一行,因此它是500.對於2014-05-22 Type是Sell,所以current [Quantity] - previous row [Vol] = 500 - 500 = 0。 –

回答

1

試試這個:

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 

也許你會想先訂購你的data.frame,只是爲了確定?

+0

謝謝羅德里戈。想知道可能會有一些簡短的R風格代碼來做同樣的事嗎? –

+0

@AndroidBeginner可能。但我認爲任何人都可以更好地理解舊的編程技巧。不客氣。 – Rodrigo

+0

@AndroidBeginner我第一次誤解了你的問題。現在呢? – Rodrigo