2014-11-24 29 views
1

新手ř程序員奮力空間組件添加到大的數據集(> 1500個OBS)返回中的R的觀察給定半徑內的屬性

鑑於列表:觀察,對應的x/y點(未LAT /長)和屬性;我怎樣才能寫出一個算法來返回給定半徑(10)內所有觀測值的變量「Z」的總和。我需要爲每個觀察做到這一點。

簡化的數據報頭的內容如下:

OBS  X  Y   Z** 
A  56.55  -289.65 
B  52.59  -287.82 
C  58.34  -284.58  

任何援助將不勝感激。謝謝。

回答

3

的關鍵是在同一時間使用mapply()申請一個函數 ultiple載體 - 在這裏:X和您的data.frame的Y分量。哪個功能?爲data.frame中的所有觀測結果添加Z變量,該變量最多不超過「定位點」(我們運行所有條目)的radius

> set.seed(1) 
> foo <- data.frame(X=runif(100),Y=runif(100),Z=runif(100)) 
> radius <- 0.5 
> result <- mapply(function(X,Y,Z) 
    sum(foo$Z[(foo$X-X)^2+(foo$Y-Y)^2<=radius^2]),foo$X,foo$Y) 
> head(cbind(foo,result)) 
      X   Y   Z result 
1 0.2655087 0.6547239 0.2675082 24.99153 
2 0.3721239 0.3531973 0.2186453 30.51512 
3 0.5728534 0.2702601 0.5167968 28.15519 
4 0.9082078 0.9926841 0.2689506 12.10058 
5 0.2016819 0.6334933 0.1811683 22.50695 
6 0.8983897 0.2132081 0.5185761 19.05273 

請注意,當然每個點的Z本身都計入其半徑。如果你不想這樣做,你需要減去foo$Z

看看?mapply

+0

看起來這只是計算每個點的鄰居數量。我想這個問題要求在相鄰點上的第三個變量Z的總和。也許OP可以澄清這是否真的回答了這個問題。 – 2014-11-26 13:06:46

+0

Ege你是正確的,計數是不夠的,我需要總結「Z」。 該數據集與林業相關,涉及鄰近樹木引起的競爭。 「Z」是樹木的基礎面積,因爲較大的相鄰樹木比較小的樹木施加更多的競爭,因此數量不足。 – cd275 2014-12-01 16:44:48

+0

感謝您的澄清。我編輯了我的答案。 – 2014-12-01 16:51:38