R에서 ID로 SpatialPolygonsDataFrame을 서브셋합니까?


13

패키지 의 gIntersect함수를 사용하여 rgeos두 개의 SpatialPolygonsDataFrames (spdfs)에서 교차하는 다각형을 결정했습니다. 결과는 sfdf # 1의 폴리곤 ID를 포함하는 행 이름과 spdf # 2의 폴리곤 ID를 colnames하는 논리 행렬입니다. 이 행렬을 사용하여 함수를 사용하기 전에 겹치지 않는 다각형을 생략하고 두 개의 원본 spdf를 하위 세트로 만들고 싶습니다 gIntersection. 논리 행렬을 적어도 일부 겹치는 다각형을 나타내는 두 개의 ID 벡터 (각 spdf마다 하나씩)로 쉽게 변환 할 수 있습니다.

내 질문은-다각형 ID 벡터를 사용하여 spdf의 하위 집합을 사용할 수 있습니까? 그렇다면 @data슬롯의 값을 올바르게 서브 세트 합니까? 이 구문을 사용하여 일반적으로 spdf를 하위 집합으로 만들 수 있다는 것을 알고 있습니다.

spdf[spdf@data$myVariable[someVector], ]

spdf 목록 구조에 훨씬 더 깊이 묻혀 있기 때문에 ID에는 작동하지 않습니다.

답변:


11

gIntersect에서 반환 된 행렬 ID는 각 소스 sp 객체의 행 이름과 일치해야합니다. 데이터의 서브셋을 설정하기 위해 행 이름 위치를 인덱싱 할 수 있어야합니다.

r <- c(1,5,3,9,10)
sp.polys <- sp.polys[r,]

그냥 확인하고 싶습니다-spdf 객체에서도 직접 작동합니까? (즉, spdf[r, ])
Alberto

예, sp 객체에서 작동하며 인덱스는 @data 행 이름에 해당하는 모든 슬롯 객체를 연결하는 ID를 통해 전파됩니다.
Jeffrey Evans

어쩌면 나는 올바르게 읽지 못하지만 약간 잘못 보입니까? 당신은에 추출해야 문자열 r ordinally 추출합니다 정수를 사용하여, 행 이름
MichaelChirico

알려진 행 위치를 반환하는 @MichaelChirico가 맞습니다. 행 이름의 값만 아는 경우 which (rownames (x) % in % c (1,5))와 같은 것을 사용하여 색인을 만들 수 있으며 실제 문자열이 행 이름에 지정되어 있지 않으면 아니오 값을 인용 할 필요가 없습니다. 기본 행 이름은 1 : n으로 인용 된 벡터입니다.
Jeffrey Evans 10
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.