У меня возникли проблемы с поиском решения, которое правильно обрабатывает классификацию переменного числа соседей для любого данного наблюдения в кадре данных на основе некоторого условия. Я хотел бы иметь возможность добавить простую двоичную переменную индикатора во фрейм данных, которая будет равна 1, если условие выполнено, и 0, если это не так.
Когда я застреваю, я не уверен, как итеративно проверять условие только по соседним наблюдениям, в любом направлении (то есть, чтобы проверить, если из 4 соседних наблюдений в данном столбце в моем фрейме данных, по крайней мере, 3 из 4 из них содержат одинаковое значение). Я попытался сначала создать другую переменную индикатора, указывающую, выполнено ли условие или нет (1 или 0 = да или нет). Затем я попытался установить серию ifelse()
операторов в цикле, чтобы попытаться назначить правильную категоризацию наблюдения, где выполняется начальное условие, +/- 2 наблюдения в любом направлении. Однако, когда я проверяю кадр данных после выполнения цикла, только само наблюдение (не его соседи), где выполняется условие, получает значение, а не все соседние наблюдения, также получающие значение. Вот мой код:
#sample data
sample_dat <- data.frame(initial_ind = c(0,1,0,1,0,0,1,1,0,1,0,0))
sample_dat$violate <- NULL
for(i in 1:nrow(dat_date_ord)){
sample_dat$violate[i] <- ifelse(sample_dat$initial_ind[i]==1 &
((sample_dat$initial_ind[i-2]==1 |
sample_dat$initial_ind[i-1]==1) &
(sample_dat$initial_ind[i+2]==1 |
sample_dat$initial_ind[i+1]==1)),
"trending",
"non-trending"
)
}
Этот цикл правильно идентифицирует одну из четырех точек, которые должны быть помечены как "трендовые", но он также не назначает "трендовые" правильным соседям. Другими словами, я ожидаю, что результат будет "трендовым для наблюдений 7-10, так как все 3/4 наблюдений в этой группе из 4 имеют значение 1 в столбце исходного индикатора. Мне кажется, что может быть более простой способ Выполните это, но мне нужно убедиться, что мой код достаточно устойчив, чтобы идентифицировать и назначать наблюдения группе, независимо от того, хочу ли я 3/4 для обозначения группы, 5/6, 2/5 и т. д.
Спасибо за любые советы.