2013-09-27 6 views
2

가 함수 내에서 동일한 데이터 프레임에서 선택하는 말도 안되는 것 같습니다 그러나 나는 다음과 같은 apply*이 DataFrame

apply([email protected], 1, function(x) { 
         cat(coordinates(exdf[exdf$id == x["id"],]), "\n") 
           }) 

를 실행할 수 있습니다

library(sp) 
exdf <- data.frame(cbind(1:10, 41:50, 101:110)) 
names(exdf) <- c("id", "x", "y") 
coordinates(exdf) <- c("x", "y") 

SpatialPointsDataFrame

다음 내가 가진 가정 공간에 적용하여. 나는 이미 그것을 반복하고있다. [email protected]에만 보내고, 내 실제 사용에서, 나는 데이터 프레임의 행과 다른 기능에 대한 좌표를 모두 보낼 필요가

주, 그래서 apply를 선택할 수 없습니다.

질문 1 : exdf[exdf$id == x["id"],] 부분없이이 작업을 수행 할 수있는 방법이 있습니까?

질문 2 : 그렇지 않은 경우 해당 작업에 sp 대신 사용할 수있는 패키지가 있습니까? 주로 over 함수에 대해 sp이 필요하며 spatstat을 선택하고 sp을 사용하는 것이 더 간단하다고 결정했습니다. 그러나 실제로 "data.frame"이 아닌 "데이터 프레임"을 사용하면 나를 귀찮게합니다.

감사합니다.

+0

실제로 무엇을하고 싶습니까? 이 다른 함수는 무엇입니까? –

+0

@ SimonO101 : 열 중 하나가 벡터입니다. 각 행에는 데이터와 같은 시계열이 있습니다. 직사각형 영역의 후보가있는 경우이 행을 데이터 집합의 행과 비교합니다. 직사각형 영역은 각 쿼리 행마다 변경되고 쿼리 행의 좌표에서 직사각형 다각형을 생성 한 다음 데이터 집합 행에 오버레이를 만들어 후보를 가져옵니다. 나는이 모든 것을 수동으로 작성할 수 있지만 사용 가능한 경우 기존의 우아한 솔루션을 사용하고 싶습니다. –

+0

나는 내 대답을 편집했지만 원하는 최종 결과가 무엇이고 어떤 제약 조건이 적용되는지 명확하게 밝히지 않았다는 것을 인정해야합니다. – chryss

답변

1

쉽게 정기적 data.frame로 SpatialPointsDataFrame 변환하고 거기에서 다음 진행할 수 :

> df <- as.data.frame(exdf) 
> df 
    id x y 
1 1 41 101 
2 2 42 102 
3 3 43 103 
4 4 44 104 
5 5 45 105 
6 6 46 106 
7 7 47 107 
8 8 48 108 
9 9 49 109 
10 10 50 110 
> paste(df$x, df$y, sep=' ') 
[1] "41 101" "42 102" "43 103" "44 104" "45 105" "46 106" "47 107" "48 108" "49 109" "50 110" 

편집 : 주석에서, 영업 이익은 간단한 방법으로하지만 변환하지 않고 결과를 달성하고자하는 Spatial * DataFrame을 data.frame으로 변환합니다. 그의 예와 같은 결과는 다음 코드를 사용하여 얻을 수 있지만 추가 열도 인쇄/연결/처리 될 경우 변경해야합니다.

+0

필자는 이것이 더 우아하지만 'lapply (seq (to = nrow (exdf), function (i) {el <- exdf [i,]})'성능상 현저한 차이가 나는가? 데이터 프레임과 그것의 공간 상응하는 사이에 앞뒤로 변환하고 싶지 않아요. 나는 또한'x'와'y'에 대한 여분의 열을 유지할 수 있지만, 난 단순히 사각형 내에서 행을 찾는 함수를 작성할 수 있습니다. :) –

+0

글쎄, 당신의 문제 진술서에서 명확하게하는 것이 유용합니다. 당신은 당신이 공연에 대해 염려하지 않는다고 말하지 않았습니다. 당신의 관심은 가독성에 있다고 들었습니다. 또한 데이터 세트의 크기가 10 포인트 인 경우 성능이나 메모리를 최적화하는 것이 미친 듯합니다. 데이터 세트의 크기가 적절한 경우 질문에 그렇게 대답하는 것이 좋습니다. 좀 더 생각해 볼게. – chryss