我正在处理一个空间数据集,我需要将其划分为训练和验证子集。
具体来说,我有一个有31个乐队的光栅;我需要将它们全部用作将数据集划分为两个子集的参数。我希望使用Kennard-Stone算法进行除法,因此我研究了R
中可以使用的两个现有函数。
第一个是ken.sto
包中的soil.spec
。第二个是duplex
包中的cran
。问题是它们都需要矩阵或数据帧作为输入,而我有一个多层栅格,我只能转换成一个数组。
有没有人对如何转换空间数据有任何建议,以便可以在其中一个KS函数中使用?
答案 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?