4

data.tableサブセットを実行する場所でキーを保持しません

setkey(DT,a,b,c)
key(DT[,list(a,b)]) # return NULL

これを回避する方法はありますか (ここで、XY したがって Z は data.table です)。私は実際にこれをやりたい=>

Z = X[,list(a, b, c)][Y, mult='last']

注:私はできる

X2 = X[,list(a, b, c)]
setattr(X2,"sorted",c("a","b","c"))
Z = X2[Y, mult='last']

しかし、XをX2にコピーしたくありません

編集例:

Y = data.table(a=seq(2,4),key="a")
X = data.table(a=seq(1,5),b=seq(2,6),c=sample(letters,5),key="a,b,c")
X[,list(a, b, c)][Y, mult='last']
Error in `[.data.table`(X[, list(a, b, c)], Y, mult = "last") : 
When i is a data.table (or character vector), x must be keyed

UPDATE (eddi):バージョン 1.8.11 以降、これは修正され、キーは最初のサブセットに保持されるため、結果は次のようになります。

X[,list(a, b, c)][Y, mult='last']
#   a b c
#1: 2 3 k
#2: 3 4 z
#3: 4 5 u
4

1 に答える 1

4

これを試して:

setkey(X[,list(a, b, c)])[Y, mult='last']

または、X[Y] を実行してから、X から他のすべての列を NULL に設定することもできます

X[Y, mult="last"][, c(names_to_remove) := NULL]
于 2013-03-28T15:15:51.867 に答える