2015-01-12 2 views
2

두 개의 열 (V1, V2)이 키로 설정된 data.table이 있습니다. 세 번째 열에는 여러 값이 있습니다.R data.table - 2 개의 열로 구성된 키로 여러 행 검색

나는 첫 번째 테이블 키에서 검색하고자하는 쌍으로 또 다른 data.table을 가지고 V3에서 목록의 연합 목록을 반환합니다.

locations<-data.table(c(-159.58,0.2,345.1),c(21.901,22.221,66.5),list(c(10,20),c(11),c(12,33))) 
setkey(locations,V1,V2) 

searchfor<-data.table(lon=c(-159.58,345.1,11),lat=c(21.901,66.5,0)) 

최종 결과는 다음과 같아야합니다

[1] 10 20 12 33 

다음 작품은 단지 하나 개의 항목을 검색 할 때.

locations[.(-159.58,21.901),V3][[1]] 
[1] 10 20 

나는 이것을 일반화 테이블이 BTW 검색된 인덱스 (에 대한 소스로 "searchfor"를 사용하는 방법을 모른다 - (가) 테이블을 다른 형식으로 변경할 수 있습니다 "searchfor"는 솔루션 쉽게 경우). 또한 V3에서 다른 값을 통합하여 하나의 목록으로 (잘하면) 수신 할 수 있습니까?

+0

간단히'위치 [searchfor, V3를]'또는'위치'(명시하는 것을 [(searchfor), V3는.] 바이너리 검색 기능 사용). – Arun

+0

이것은 앞으로 큰 발전 (감사합니다 @ Arun!),하지만 내가 필요로하는 것은 아닙니다. 최종 결과는 V3에서 발견 된 값 목록이어야합니다. 원본 질문에이 정보를 추가하겠습니다. – KeshetE

+0

[this post] (http://stackoverflow.com/a/27543075/559784)의 전반부는 data.table의 하위 집합/조인을 이해하는 데 매우 유용 할 수 있습니다. – Arun

답변

1

data.table과 동일한 구문을 색인으로 사용할 수 있습니다.

lst <- locations[ .(searchfor), V3] 

null이 아닌 요소 만 사용하는 것이 좋습니다. 그래서, 당신이 직접 nomatch=0L 인수를 사용할 수있는 경우 :

locations[ .(searchfor), V3, nomatch=0L] 
# [[1]] 
# [1] 10 20 
# 
# [[2]] 
# [1] 12 33 

이 목록을 반환합니다. 대신 벡터를 반환 할 경우, 다음과 같이 기본 기능 unlist()를 사용

locations[ .(searchfor), unlist(V3), nomatch=0L] 
# [1] 10 20 12 33 
+0

'rbind' 부분을 제거하고 출력 결과를 추가했습니다. 희망은 괜찮아. 그렇지 않은 경우 되감 으십시오. – Arun

+0

감사합니다. @Arun, 이것이 완벽합니다. – KeshetE