2017-01-05 8 views
0

Я имею дело с пространственным набором данных, который мне нужно разделить на обучение и подмножество проверки. Чтобы быть конкретным, у меня есть растра с 31 полосой; Мне нужно использовать все их в качестве параметров для разделения набора данных на два подмножества. Я хочу использовать алгоритм Кеннарда-Стоуна для деления, поэтому я рассмотрел две существующие функции, которые можно использовать в R.Как запустить алгоритм Кеннарда-Стоуна с многослойным растром?

Первый - ken.sto в пакете soil.spec. Второй - duplex в пакете cran. Проблема в том, что для обоих из них требуется матрица или фреймворк данных, а у меня многослойный растровый, который я могу преобразовать только в массив.

Есть ли у кого-нибудь предложения о том, как преобразовать мои пространственные данные, чтобы он мог использоваться в одной из функций KS?

+1

Добро пожаловать в stackoverflow. Ваш вопрос довольно широк. Этот сайт задает вопрос о конкретных проблемах с кодированием, таких как ошибки, неправильный вывод и т. Д. Вы также должны добавить R в качестве тега, чтобы люди, знающие язык, могли найти ваше сообщение. Этот вопрос может быть лучше приспособлен для компьютерных наук. – curt

ответ

0

Если вы используете ras, вы можете использовать as.data.frame(ras) для преобразования вашего многослойного растра в data.frame. Это приведет к двумерному data.frame с n столбцами (n = растровые слои в вашем случае 31) и m строк (m = количество ячеек в вашем растере). Затем вы должны использовать функцию soil.spec, которая требует ввода data.frame.

Примечание: Вы однако теряют пространственную информацию, если вы преобразовать ваш raster в data.frame. После того, как вы применили выборку, вы можете экспортировать результат обратно в растровый. Здесь вы можете использовать индексы строк data.frame, чтобы вернуть значения в начальную сетку raster.

+0

Привет @maRtin, спасибо за ваш ответ. Извините, если я отвечаю только сейчас, но мне пришлось оставить эту работу раздельно, и я начал снова только сейчас. Ваше предложение работало хорошо, действительно мне удалось создать необходимый мне фреймворк. Однако у меня есть еще один вопрос, который вы ожидали ... как мне вернуть эту информацию на растровый? Я понятия не имею! –

0

Большое спасибо maRtin, вы помогли мне найти нужную функцию (и извините за поздний ответ). Однако у меня есть еще одна проблема; после преобразования растров в dataframes, я попытался снова запустить ken.sto, и я получаю другую ошибку:

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

Вот часть резюме dataframe я использовал в качестве входных данных:

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 

Итак, по-видимому, проблема в том, что у меня есть НС?

+0

Добро пожаловать в StackOverflow! Если у вас есть новый вопрос, вы должны начать новую тему или комментарий по моему ответу. Я не думаю, что проблемы NA - проблема, а скорее столбцы с нулевой дисперсией (все значения одинаковы). Попробуйте удалить их, а затем он должен работать. Посмотрите здесь: http://stackoverflow.com/questions/15068981/removal-of-constant-columns-in-r и здесь: http://stackoverflow.com/questions/40315227/how-to-solve-prcomp-default -cannot-rescale-a-constant-zero-column-to-unit-var КПП. Если вы нашли мой ответ полезным, вы можете пометить его как принятое или переместить его ниже. – maRtin