如何运行 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?
我正在处理一个空间数据集,我需要将其分为训练子集和验证子集。
具体来说,我有一个包含 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?