2013-03-28 1 views
4

data.table을 유지하지이 (X, Y, 따라서 Z가 data.table 곳)? 내가키를 유지하지 않는 키를 해결

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

을 할 수 있지만 X2에

EDIT 예 X를 복사하지 않습니다 : 는 사실이 =>

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

참고하고 싶은

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 서브 세트에서 유지version 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 
+0

예제를 제공하십시오. – Arun

+4

글쎄, 나는 데이터로 작업하는 것이 더 쉽다는 것을 알았다. 그리고 나는 질문이 생길 때마다 하나를 만들고 싶지 않습니다 (그러나 단순 할 수도 있습니다). 나는 대답 할 누군가에게 남겨 두겠다. – Arun

+0

@edd : Nice! 나는이 작업을 아래에 언급 한'with = FALSE' 방법으로 수행해 왔습니다. 귀하의 업데이트는 전체 게시물을 읽어야하므로 약간의 암시 적입니다. 'key (DT [, list (a, b)])'의 결과는 더 명확해질 것이다. 또한 사본이 만들어 졌습니까 (OP의 우려 사항 중 다른 것)? 복사를 피할 수 있다면 놀랄 것입니다 ... – Frank

답변

4

이 시도 :

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

을 양자 택일로, 당신을 X [Y]를 수행 한 다음 X에서 NULL로 다른 모든 열을 설정할 수 있습니다.

X[Y, mult="last"][, c(names_to_remove) := NULL] 
+1

내 게으름으로 처벌 받는다 ... 커피를 마시는 시간 ... 내 자신의 질문을 버리도록 유혹 받는다. 좋지 않다. – statquant

+0

Arun, @statquant, 무슨 일이 일어 났는지 모르겠다. 구현 된 것으로 생각되는 이전 기능 요청을 다시 열고 버그 상태로 변경했습니다. [# 295 \t 주문 보존 하위 키 유지 후 키 유지] (https://r-forge.r-project.org/tracker/index.php?func=detail&aid=295&group_id=240&atid=975) –

+0

@MatthewDowle, 그렇지 않습니다. 이 기능이 구현 된 것을 기억하고, 내가 출시 할 때 "새로운 기능"을 보려는 경향이 있습니다 ... – statquant

관련 문제