You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在spatstat中使用quadratcount()时保留标记信息?

高效拆分带标记点模式为样方数据框的方法

针对你需要将带标记的点模式按2x2样方分组,同时保留每个样方内点的坐标和标记信息的需求,这里有个利用spatstat包内置函数的优雅解决方案:

步骤1:划分样方并关联每个点到对应样方

首先用quadrats()函数创建2x2的样方划分,这个函数会返回一个与原点点数一致的标记向量,自动标记每个点所属的样方:

library(spatstat)

# 加载示例数据集
data(ants)

# 创建2x2样方划分,获取每个点的样方归属
quad_assignments <- quadrats(ants, nx = 2, ny = 2)

步骤2:按样方拆分点模式并转换为数据框

接下来用split()函数将原点点模式按样方归属拆分,再通过lapply()将每个样方的点模式对象转换为包含坐标和标记的数据框:

# 按样方拆分点模式
split_points <- split(ants, f = marks(quad_assignments))

# 转换每个样方的ppp对象为数据框
quadrat_dfs <- lapply(split_points, function(quad_ppp) {
  data.frame(
    x = quad_ppp$x,
    y = quad_ppp$y,
    marks = marks(quad_ppp)
  )
})

查看结果

现在quadrat_dfs就是你想要的列表,每个元素对应一个样方的数据框,样方名称自动包含坐标区间:

# 查看第一个样方的内容
quadrat_dfs[[1]]

输出会和你期望的格式一致:

x   y          marks
29 275 325      Messor
36   2 267      Messor
39 124 293      Messor
...
76 326 303 Cataglyphis
80  -7 233 Cataglyphis
...

自定义样方名称(可选)

如果你希望样方名称更简洁(比如q1、q2),可以直接修改列表的名称:

names(quadrat_dfs) <- paste0("q", 1:length(quadrat_dfs))

为什么这个方法更高效?

  • 避免了手动编写坐标区间判断的冗余代码,利用spatstat的内置逻辑保证样方划分的准确性
  • 直接关联点与样方归属,拆分和转换过程一气呵成,代码简洁易维护
  • 完整保留了所有点的原始信息(坐标+标记),完全满足空间分布分析的需求

内容的提问来源于stack exchange,提问作者Anton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 16:25:17