Я хочу выполнить анализ скользящего окна длинного вектора в R. При этом я хотел бы проверить, содержат ли заданные фрагменты этого вектора определенное значение.
Ниже я вставляю воспроизводимый пример. Этот вектор (vctr) содержит 77 элементов (либо 0, либо 1). Я анализирую его со скользящим окном, охватывающим 10 элементов (сегмент) с перекрытием, охватывающим 5 элементов (перекрытие).
Я знаю, как проверить, содержит ли данный фрагмент определенное значение (в данном случае 1) или нет (split_vctr). Однако я также хотел бы сделать что-то еще, а именно:
Я хотел бы создать новую переменную (список или вектор), содержащую только индексы тех фрагментов, которые соответствуют заданному критерию (в данном случае: содержат хотя бы одно значение, равное 1; в данном случае: ИСТИНА).
Предположим, что исходный список будет именованным - как я могу извлечь только имена фрагментов, которые ИСТИННЫ?
Я был бы очень признателен за вашу помощь.
фиктивные данные:
# dummy vector
vctr <- c(rep(0, 11), rep(1, 4), rep(0, 25), rep(1, 3), rep(0, 31),rep(1, 3))
# split parameters:
segment <- 10 # length of each segment
overlap <- 5 # length of each overlapping part
#finding coordinates
start_coordinates <- seq(1, length(vctr), by=segment-overlap)
end_coordinates <- start_coordinates + segment - 1
#check whether splitted vector fragments meet a condition
split_vctr <- lapply(1:length(start_coordinates), function(i) 1 %in% vctr[start_coordinates[i]:end_coordinates[i]])
@langtang под «начальным списком» я имел в виду переменную split_vctr из моего фиктивного примера. Это список значений TRUE/FALSE, соответствующих каждому перекрытию, полученному из начального вектора (vctr). А что касается имен фрагментов - я думал присвоить имена, используя анонимное веселье внутри lapply (не включено в фиктивный пример, так как это не критично. Извините, если я ввел вас в заблуждение: здесь неродное.
which(unlist(split_vctr))
вернет индексы split_vctr
, где это ИСТИНА
Если бы сам split_vctr
был назван, вы могли бы использовать эти индексы для извлечения имен ИСТИННЫХ фрагментов следующим образом:
names(split_vctr)[which(unlist(split_vctr))]
когда вы говорите «начальный список», вы имеете в виду, что у вас есть список или вектор имен фрагментов, например
fragments=c("a","b","c","d","e"....)
?