data.table
在进行子集操作时不会保留关键字信息
setkey(DT,a,b,c)
key(DT[,list(a,b)]) # return NULL
有人有解决这个问题的方法吗?(其中X Y因此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
更新(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
with=FALSE
的方式进行此操作。你的更新有点晦涩,因为它需要阅读整篇文章才能理解key(DT[,list(a,b)])
的结果更清晰。另外,是否会复制(OP的另一个关注点)?如果可以避免复制,我会感到惊讶... - Frank