1

大規模なデータセット (>1500 obs) に空間コンポーネントを追加するのに苦労している初心者の R プログラマー

与えられたリスト: 観測、対応する x/y ポイント (緯度/経度ではない)、および属性。問題の観測の特定の半径 (10) 内にあるすべての観測の変数 "Z" の合計を返すアルゴリズムを作成するにはどうすればよいですか。観測ごとにこれを行う必要があります。

単純化されたデータ ヘッダーは次のように読み取られます。

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

任意の支援をいただければ幸いです。ありがとう。

4

1 に答える 1

3

重要なのは、関数を一度に複数のベクトルに適用するために使用することです。ここでは、 の X および Yコンポーネントmapply()です。どの機能?「アンカーポイント」(すべてのエントリを実行します)から最大で離れているすべての観測値の変数を追加するもの。data.frameZdata.frameradius

> 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

于 2014-11-24T08:10:39.427 に答える