如何运行 Kennard-Stone 算法与多层栅格?

How to run the Kennard-Stone algorithm with a multilayer raster?

我正在处理一个空间数据集,我需要将其分为训练子集和验证子集。 具体来说,我有一个包含 31 个波段的栅格;我需要将它们全部用作将数据集划分为两个子集的参数。我希望使用 Kennard-Stone 算法进行除法,所以我研究了可以在 R.

中使用的两个现有函数

首先是soil.spec包中的ken.sto。第二个是 cran 包中的 duplex。问题是它们都需要矩阵或数据框作为输入,而我有一个只能转换为数组的多层栅格。

有没有人对如何转换我的空间数据有任何建议,以便它可以用于 KS 函数之一?

如果 ras 是您堆叠的,您可以使用 as.data.frame(ras) 将多层栅格转换为 data.frame。 这将导致二维 data.frame 具有 n 列(n = 栅格图层,在您的情况下为 31)和 m 行(m = 栅格中的单元格数)。然后你应该能够应用需要 data.frame 作为输入的 soil.spec 函数。

注意: 但是,如果将 raster 转换为 data.frame,您将丢失空间信息。应用采样后,您可能希望将结果导出为栅格。在这里,您可以使用 data.frame 行的索引将值返回到初始 raster 网格中。

非常感谢 maRtin,你帮我找到了正确的函数(很抱歉回复晚了)。 但是,我现在遇到了另一个问题;将栅格转换为数据帧后,我再次尝试 运行 ken.sto,但出现另一个错误:

Error in prcomp.default(inp, scale = T) : 
  cannot rescale a constant/zero column to unit variance

这是我用作输入的数据框摘要的一部分:

 evi_pks_10.1      evi_pks_10.2      evi_pks_10.3      evi_pks_10.4  

    evi_pks_10.5      evi_pks_10.6    
 Min.   :-999.0    Min.   :-999.0    Min.   :-999.0    Min.   :-999      Min.   :-999.0    Min.   :-999     
 1st Qu.:-999.0    1st Qu.:-999.0    1st Qu.:-999.0    1st Qu.:-999      1st Qu.:-999.0    1st Qu.:-999     
 Median :   1.0    Median :  52.0    Median : 116.0    Median :5677      Median : 148.0    Median :2556     
 Mean   :-269.1    Mean   :-189.9    Mean   :-141.7    Mean   :4159      Mean   :-119.6    Mean   :2196     
 3rd Qu.:   1.0    3rd Qu.: 155.0    3rd Qu.: 212.0    3rd Qu.:6744      3rd Qu.: 245.8    3rd Qu.:4073     
 Max.   :   2.0    Max.   : 360.0    Max.   : 360.0    Max.   :9649      Max.   : 299.0    Max.   :7215     
 NA's   :1555628   NA's   :1555628   NA's   :1555628   NA's   :1555628   NA's   :1555628   NA's   :1555628  
  evi_pks_10.7      evi_pks_10.8      evi_pks_10.9     evi_pks_10.10     evi_pks_10.11     evi_pks_10.12 

所以,显然问题是我有 NA?