오류의 유익한 부분은 작업중 인 데이터가 S4 클래스 객체이며 슬롯이 포함되어 있다는 것입니다. 즉, 데이터 프레임이 포함 된 적절한 슬롯 "@data"에서 작업해야합니다.
NA 값으로 "모든"행을 삭제하려면 데이터 프레임 슬롯에서 na.omit을 사용하면됩니다. 이것은 sp 객체를 통해 전파되고 다른 슬롯에서 연관된 점 / 다각형을 제거합니다.
shape@data <- na.omit(shape@data)
특정 열에서 NA가있는 행을 제거하려면 다음을 사용할 수 있습니다.
shape@data <- shape[!is.na(shape@data$col) ,]
**** 업데이트 03/08/2016 sp 개체에서 작동하는 기본 병합 기능이 있습니다. 다른 data.frame과 동일한 방식으로 병합을 호출 할 수 있습니다. 그러나 x 인수는 sp SpatailDataFrame 클래스 객체이고 y는 병합하려는 data.frame입니다. 참고 목적으로 원래 답변을 남기고 있습니다.
또한 병합 기능을 사용하여 sp 객체에 연결할 수 없다는 점도 지적해야합니다. 병합 기능은 작업 중에 데이터를 사용하여 sp 개체의 내부 관계를 해제합니다. 불행히도, 이것은 널리 보급되지 않은 것입니다. 데이터 프레임을 sp 객체의 @data 슬롯에 병합하려면 이와 같이 match를 사용할 수 있습니다.
shape@data = data.frame(shape@data, OtherData[match(sdata@data$IDS, OtherData$IDS),])
어디; shape는 모양 파일이고 IDS는 병합하려는 식별자이고 OtherData는 모양과 결합하려는 데이터 프레임입니다. IDS는 두 데이터 세트에서 이름이 다를 수 있지만 실제로 같은 값이어야합니다 (퍼지 아님).
또는이 기능을 사용할 수 있습니다.
join.sp.df <- function(x, y, xcol, ycol) {
x$sort_id <- 1:nrow(as(x, "data.frame"))
x.dat <- as(x, "data.frame")
x.dat2 <- merge(x.dat, y, by.x = xcol, by.y = ycol)
x.dat2.ord <- x.dat2[order(x.dat2$sort_id), ]
x2 <- x[x$sort_id %in% x.dat2$sort_id, ]
x2.dat <- as(x2, "data.frame")
row.names(x.dat2.ord) <- row.names(x2.dat)
x2@data <- x.dat2.ord
return(x2)
}
어디; x = sp SpatialDataFrame 객체, y = x와 병합 할 데이터 프레임 객체, xcol = sp 객체의 열 이름 병합 (따옴표 필요), ycol = 데이터 프레임 객체의 열 이름 병합 (따옴표 필요)
어떤 이유로 @Kelly 질문에 댓글을 달 수 없으므로 원래 답변을 편집하고 있습니다. 실행중인 R 및 sp 버전을 확인하십시오. SessionInfo ()를 실행하여 찾을 수 있습니다. @data 객체를 조작 할 때 다른 데이터 슬롯에서 연관된 객체를 제거하는 동작은 마지막 커플 sp 버전에서만 사용할 수있었습니다. 현재 버전을 실행하지 않는 경우 패키지 메뉴에서 "패키지 업데이트"로 패키지를 업데이트하십시오. > = Windows Vista를 실행중인 경우 반드시 관리자 권한으로 실행하십시오. 또한 행 / 콜 수를 나타내는 dim (shape)과 같은 개체 전후의 차원을 살펴보십시오. 행 수는 피처 객체 수에 해당합니다. 공간 객체의 행 수가 @data 슬롯의 행 수와 일치하는지 확인하여 결과를 확인할 수 있습니다 (예 : dim (shape);