2013-02-15 3 views
5

this post 다음에 나는 data.table에있는 목록의 열에 대해 다른 질문이 있습니다.data.table에서 열의 목록으로 키를 입력하는 방법

DT = data.table(x=list(c(1,2),c(1,2),c(3,4,5))) 

목록의 열을 키를 사용할 수없는 것 같습니다.

DT[,y:=.I,by=x] 
Erreur dans `[.data.table`(DT, , `:=`(y, .I), by = x) : 
    The items in the 'by' or 'keyby' list are length (2,2,3). Each must be same length as rows in x or number of rows returned by i (3). 

는 내가 같은 길이의 목록과 수 있지만, 생각 :

DT = data.table(x=list(c(1,2),c(1,2),c(3,5))) 
DT[,y:=.I,by=x] 
Erreur dans `[.data.table`(DT, , `:=`(y, .I), by = x) : 
    The items in the 'by' or 'keyby' list are length (2,2,2). Each must be same length as rows in x or number of rows returned by i (3). 

해결 방법이 있습니까? 기능 요청은 어떨까요?

+0

예,'list'가 키 열로 (현재) 허용되지 않습니다. 'setkey (DT, "x") 할 때이 메시지를 받는다 – Arun

답변

3

내가 해결 방법으로 이런 일을 할 거라고 :

DT[, y := which(DT$x %in% x), by = 1:nrow(DT)] 

이는 그룹 ID가 될 것 항상 첫 번째 일치하는 인덱스를 반환합니다.

당신은 같이해야합니다 :

DT[, psnInGrp := seq_along(x), by=y] 

#  x y psnInGrp 
# 1: 1,2 1  1 
# 2: 1,2 1  2 
# 3: 3,4,5 3  1 
+1

Doh ... 커피 시간 ... – statquant

+0

'by = 1 : nrow (DT)'에 대해서는 확실하지 않다. j에서'lapply'와 친구들을 사용하는 것이 더 빠를 수도 있습니다. –

+0

@MatthewDowle,'1 : nrow (DT)'를하지 않고 행 단위로 선택할 수 있습니까? – Arun

관련 문제