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

如何展开spatialsampling的spatial_clustering_cv对象并为sf数据添加折ID

为SF对象添加空间聚类折叠ID(Fold IDs)

要给SF对象添加空间聚类生成的折叠ID,不需要用unnest处理spatial_clustering_cv的输出——它返回的是特殊的拆分对象,直接展开会报错。下面是正确的实现方法:

解决方案代码

library(sf)
library(spatialsample)
library(modeldata)
library(tidyr)
library(purrr)
library(stringr)

# 加载数据并转换为SF对象
data("ames", package = "modeldata")
ames_sf <- sf::st_as_sf(
  ames,
  coords = c("Longitude", "Latitude"),
  crs = 4326
)

# 生成15组空间聚类折叠
set.seed(123)
cluster_folds <- spatial_clustering_cv(ames_sf, v = 15)

# 提取每个样本对应的折叠ID
fold_assignments <- map_dfr(
  seq_len(nrow(cluster_folds)),
  function(fold_num) {
    # 获取当前折叠的拆分对象
    current_split <- cluster_folds$splits[[fold_num]]
    # 提取测试集的行索引(若需要标记训练集,改用analysis()函数)
    test_indices <- assessment(current_split)
    # 生成格式化的折叠ID(如Fold01、Fold02)
    fold_id <- paste0("Fold", str_pad(fold_num, 2, pad = "0"))
    
    tibble(
      rowid = test_indices,
      id = fold_id
    )
  }
)

# 将折叠ID合并到原SF对象
ames_sf_with_fold <- ames_sf %>%
  mutate(rowid = row_number()) %>%
  left_join(fold_assignments, by = "rowid") %>%
  select(-rowid)

代码说明

  1. 提取折叠索引:通过map_dfr遍历每个折叠,用assessment()获取该折叠测试集的行索引;如果要标记训练集,替换为analysis()即可。
  2. 格式化折叠ID:用str_pad确保折叠ID是两位数格式,匹配你期望的输出样式。
  3. 合并到原数据:给原SF对象添加临时行号,通过行号关联折叠ID,最后移除临时行号列。

原错误原因

spatial_clustering_cv返回的cluster_folds对象中,splits列的每个元素是spatial_clustering_split类型的拆分对象,不是普通向量或列表。unnest无法解析这种特殊对象,因此会抛出类型不匹配的错误。

效果验证

查看处理后的核心列,会看到新增的id列包含对应的折叠ID:

head(select(ames_sf_with_fold, Street, geometry, id))

输出示例:

# A tibble: 6 × 3
  Street             geometry id    
  <fct>           <POINT [°]> <chr> 
1 Pave   (-93.61975 42.05403) Fold01
2 Pave   (-93.61976 42.05301) Fold01
3 Pave   (-93.61939 42.05266) Fold01
4 Pave   (-93.6173 42.05128)  Fold02
5 Pave   (-93.61729 42.05106) Fold02
6 Pave   (-93.61682 42.05134) Fold02

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 07:54:57