将 sf 转换为标记的 ppp

Convert sf to marked ppp

我使用以下代码成功地将 sf 对象转换为 ppp:

sf_owin = maptools::as.ppp.SpatialPointsDataFrame(as_Spatial(sf_points__flat))

sf_points__flat 看起来像这样:

Simple feature collection with 131 features and 3 fields
geometry type:  MULTIPOINT
dimension:      XY
bbox:           xmin: -1932934 ymin: 4958872 xmax: -1439558 ymax: 5861173
projected CRS:  NAD83(2011) / UTM zone 16N
# A tibble: 131 x 4
# Groups:   COOPID [131]
   COOPID STATION_NA                         geometry Annual_Precipitation
 *  <dbl> <chr>                      <MULTIPOINT [m]>                <dbl>
 1      0 Ontario                ((-1899685 5335073))                 9.24
 2 100010 ABERDEEN EXPERIMNT STN ((-1610453 5091311))                12.4 
 3 100227 AMERICAN FALLS 3 NW    ((-1623401 5075011))                20.4 
 4 100282 ANDERSON DAM           ((-1807106 5212322))                16.3 
 5 100347 ARBON 2 NW             ((-1606302 5034484))                10.2 
 6 100375 ARCO                   ((-1622855 5179969))                19.5 
 7 100448 ARROWROCK DAM          ((-1834338 5254236))                20.1 
 8 100470 ASHTON                 ((-1458491 5179214))                37.5 
 9 100528 AVERY RS #2            ((-1678382 5654084))                25.3 
10 100667 BAYVIEW MODEL BASIN    ((-1691954 5753129))                 9.69
# ... with 121 more rows

sf_owin 看起来像这样:

Marked planar point pattern: 131 points
Mark variables: COOPID, STATION_NA, Annual_Precipitation 
window: rectangle = [-1932934.3, -1439558.2] x [4958872, 5861173] units

现在当我尝试创建 ppp 标记类型时出现错误

Stations_ppp_types = split(sf__owin, which.marks = "Type")
Error in split.ppp(sf__owin, which.marks = "Type") : 
  Data frame of marks contains no factors

如何通过将 sf 对象转换为 ppp

来按标记 (STATION_NA) 拆分 ppp

这个问题是关于 spatstat 包的。

错误消息表明 split 命令被发送到 split.ppp,因此您可以查找 split.ppp 的帮助来找出问题所在。

帮助文件会告诉您参数 which.markssplit.ppp 忽略了。所以你可以删除那个参数。

要拆分点模式,您需要一个 factor(指定分组的分类值向量)。点模式中的标记不是因素。 (这就是错误消息的意思。)根据您的打印输出,列 STATION_NA 是字符值。如果要根据这些值拆分模式,则需要将它们转换为因子值。例如

f <- marks(sf_owin)$"STATION_NA"
f <- factor(f)
Y <- split(sf_owin, f)

或者你可以先修复点阵中的标记,这样split.ppp就可以自动工作了:

marks(sf_owin)$"STATION_NA" <- factor(marks(sf_owin)$"STATION_NA")
Y <- split(sf_owin)