【问题标题】:Return attributes within given radius of observation in R返回R中给定观察半径内的属性
【发布时间】:2015-01-21 21:23:33
【问题描述】:

新手 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     

我们将不胜感激。谢谢。

【问题讨论】:

    标签: r coordinates spatial sp


    【解决方案1】:

    关键是使用mapply()应用一个函数,一次m多个向量 - 这里:data.frame 的 X 和 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

    【讨论】:

    • 看起来这只是计算每个点的邻居数。我认为这个问题要求对相邻点的第三个变量 Z 求和。也许OP可以澄清这是否真的回答了这个问题。
    • 你说得对,计数不够,我需要对“Z”求和。该数据集与林业相关,处理由相邻树木引起的竞争。 “Z”是树木的基面积,因为较大的相邻树木比较小的树木竞争更多,因此计数不足。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多