Я работаю над проектом, который рассматривает рост деревьев после вырубки леса. Чтобы упростить набор данных для этого вопроса, у меня есть матрица (преобразованная из фрейма данных), которая имеет 10 столбцов, соответствующих 2001–2010 годам.
-1 указывает точку изменения в данных, когда ранее высаженный лесом участок был обезлесен. 1 указывает, когда ранее обезлесенный район стал лесным. 0 указывают на отсутствие изменений в состоянии.
Я нашел эту ссылку, которая, я думаю, делает то, что мне нужно, за исключением python / c ++. Поскольку я провел остальные анализы в R, я хочу придерживаться этого.
Итак, я пытался перевести часть кода на R, но у меня были проблемы.
Это мой пример набора данных. Одна из моих альтернативных мыслей заключается в том, что если бы я мог определить индекс (-1), а затем индекс 1, то я мог бы вычесть эти два индекса, чтобы получить разницу (а затем вычесть 1, чтобы учесть факторинг в первом индексе в вычитание)
# Example data
head(tcc_change)
id 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010
1 1 0 0 0 0 0 -1 0 0 1 0
2 2 0 0 0 -1 0 0 1 0 0 0
3 3 0 0 0 -1 0 0 0 1 0 0
4 4 0 -1 0 0 0 0 1 0 0 0
5 5 0 0 0 1 0 0 -1 1 0 0
# Indexing attempt
tcc_change$loss_init <- apply(tcc_change, 1, function(x) match(-1, x[1:10], nomatch = 99))
tcc_change$gain <- apply(tcc_change, 1, function(x) match(1, x[1:10], nomatch=99))
У этого метода много проблем. Что, если перед 1 (например, 1) стоит 1? Я хотел бы найти лучший способ сделать этот анализ, похожий на логическую структуру в ссылке выше, но я не знаю, как это сделать в R.
В идеале я хотел бы определить точки, в которых произошло вырубка леса (-1), а затем снова вырасти (1), а затем посчитать нули между ними. Количество нулей между ними будет размещено в новом столбце. Это дало бы мне лучшее представление о том, сколько времени потребуется для того, чтобы участок стал покрыт лесом после вырубки леса. Если между ними нет нулей (например, строка 5), я бы хотел, чтобы код вывел «0».