新手R程序员努力为大数据集添加空间组件(> 1500 obs)
给出一个列表:观察,相应的x / y点(不是纬度/经度)和属性;如何编写一个算法来返回变量的总和" Z"对于所讨论的观察的给定半径(10)内的所有观察。我需要为每次观察做到这一点。
简化数据标题如下:
OBS X Y Z**
A 56.55 -289.65
B 52.59 -287.82
C 58.34 -284.58
任何帮助将不胜感激。感谢。
答案 0 :(得分:3)
关键是一次使用mapply()
将函数应用于 m 多个向量 - 这里:{{1}的X和Y分量1}}。哪个功能?可以为data.frame
中距离“锚点”(我们在所有条目上运行)最多Z
的所有观察添加data.frame
变量。
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
。