1

新手 R 程序员努力将空间组件添加到大型数据集 (>1500 obs)

给定一个列表:观测值、对应的 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

关键是使用一次mapply()将函数应用于多个向量 - 这里:你的data.frame. 哪个功能?一个为您中最多远离“锚点”(我们遍历所有条目)Z的所有观察结果添加变量的变量。data.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 回答