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

时间:2017-01-05 17:29:00

标签: r raster sampling r-raster

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

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

有没有人对如何转换空间数据有任何建议,以便可以在其中一个KS函数中使用?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

非常感谢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 

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