2

取引日と市場価値のある取引のリストがあります。(トレーディング) 日ごとに新しいポジションがリストに追加されますが、古いポジションが消えることはありません (ポジションが期限切れになると、値は一定のままです)。リストは次のようになります。

Deal Trade_Date MktValue Desidered_Col
Deal1 31.08.2012 10 +10
Deal2 31.08.2012 21 +21
Deal1 03.09.2012 12 +2
Deal2 03.09.2012 19 -2
Deal3 03.09.2012 2  +2

各取引で、前の取引日 (上記の例では Desidered_Col) との差を取得したいと考えています。リストが非常に長いという理由だけで、ループを避けたいと思います。私はRを使用しています。誰か提案があれば幸いです。ありがとう!

4

1 に答える 1

3

data.table大きなデータセットに使用:

df <- read.table(text="Deal Trade_Date MktValue Desidered_Col
Deal1 31.08.2012 10 +10
Deal2 31.08.2012 21 +21
Deal1 03.09.2012 12 +2
Deal2 03.09.2012 19 -2
Deal3 03.09.2012 2  +2",header=TRUE)

library(data.table)
dt <- as.data.table(df)

diff.padded <- function(x) c(x[1],diff(x))

dt[,Desidered_Col2:=diff.padded(MktValue),by=Deal]

#    Deal Trade_Date MktValue Desidered_Col Desidered_Col2
#1: Deal1 31.08.2012       10            10             10
#2: Deal2 31.08.2012       21            21             21
#3: Deal1 03.09.2012       12             2              2
#4: Deal2 03.09.2012       19            -2             -2
#5: Deal3 03.09.2012        2             2              2
于 2012-10-29T12:49:26.410 に答える