2

編集:この問題は、古いバージョンのdata.tableがインストールされていることが原因でした。

私は次のようなdata.tableを持っています:

require(xts)
a <- data.table(colour=c("Red","Green","Blue","Blue","Black","Black"), date=c(as.Date("2011-07-04"),as.Date("2011-07-10"),as.Date("2011-07-09"),as.Date("2011-07-12"),as.Date("2011-07-04"),as.Date("2011-07-09")),daily.quantity=c(1,-1,2,-2,1,1))

     colour       date daily.quantity
[1,]    Red 2011-07-04              1
[2,]  Green 2011-07-10             -1
[3,]   Blue 2011-07-09              2
[4,]   Blue 2011-07-12             -2
[5,]  Black 2011-07-04              1
[6,]  Black 2011-07-09              1

色ごとの累積合計を次のようにしたいと思います。

     colour       date daily.quantity cumulative.quantity
[1,]  Black 2011-07-04              1                   1
[2,]  Black 2011-07-09              1                   2
[3,]   Blue 2011-07-09              2                   2
[4,]   Blue 2011-07-12             -2                   0
[5,]  Green 2011-07-10             -1                  -1
[6,]    Red 2011-07-04              1                   1

ただし、次のことを試してみると、色を考慮しない累積合計になります。

setkey(a,colour,date)
a[,cumulative.quantity := cumsum(daily.quantity)]

     colour       date daily.quantity cumulative.quantity
[1,]  Black 2011-07-04              1                   1
[2,]  Black 2011-07-09              1                   2
[3,]   Blue 2011-07-09              2                   4
[4,]   Blue 2011-07-12             -2                   2
[5,]  Green 2011-07-10             -1                   1
[6,]    Red 2011-07-04              1                   2

私は明白なことを試みましたが、残念ながら実装されていません:

> a[,cumulative.quantity := cumsum(daily.quantity),keyby="colour,date"]
Error in `[.data.table`(a, , `:=`(cumulative.quantity, cumsum(daily.quantity)),  : 
  Combining := in j with by is not yet implemented. Please let maintainer('data.table') know if you are interested in this.

だから、誰かがこれの回避策を提案できますか?

4

2 に答える 2

3

「日付」と「色」による合計は必要ありません。「色」による合計のみが必要です。data.tableはpkg:data.tableにあるため、xtsが必要な理由がわかりません。

> a[,cumulative.quantity := cumsum(daily.quantity), by=c("colour") ]
   colour       date daily.quantity cumulative.quantity
1:  Black 2011-07-04              1                   1
2:  Black 2011-07-09              1                   2
3:   Blue 2011-07-09              2                   2
4:   Blue 2011-07-12             -2                   0
5:  Green 2011-07-10             -1                  -1
6:    Red 2011-07-04              1                   1

実際に2つの列でwnatを実行した場合(これは、「このように見せたい」の例が間違っていることを意味します。これは、次のように実行できます。

> setkey(a,colour,date)
> a[,cumulative.quantity := cumsum(daily.quantity), by=c("colour", "date") ]
   colour       date daily.quantity cumulative.quantity
1:  Black 2011-07-04              1                   1
2:  Black 2011-07-09              1                   1
3:   Blue 2011-07-09              2                   2
4:   Blue 2011-07-12             -2                  -2
5:  Green 2011-07-10             -1                  -1
6:    Red 2011-07-04              1                   1
于 2012-08-13T18:32:28.993 に答える
2

byグループ化はオンにする必要がありますcolour

a[,cumulative.quantity := cumsum(daily.quantity), by=colour]
   colour       date daily.quantity cumulative.quantity
1:  Black 2011-07-04              1                   1
2:  Black 2011-07-09              1                   2
3:   Blue 2011-07-09              2                   2
4:   Blue 2011-07-12             -2                   0
5:  Green 2011-07-10             -1                  -1
6:    Red 2011-07-04              1                   1
于 2012-08-13T18:32:35.653 に答える