Найти точный вектор (с единицами) внутри 0-1 вектора в R - PullRequest
0 голосов
/ 13 ноября 2018

Я бы хотел найти вектор внутри другого вектора. Я всегда буду искать векторы с «единицами» внутри вектора с нулем и единицей. Например c (1,1,1) внутри c (0,0,1,1,1,0,1). Я уже придумал решение для этого:

grepl (паста (x1, коллапс = ";"), вставка (х2, коллапс = ";"))

Проблема в том, что я хочу найти точный вектор, поэтому

c (1,1) внутри c (0,1,1,0) -> TRUE

c (1,1) внутри c (0,1,1,1) -> FALSE

1 Ответ

0 голосов
/ 13 ноября 2018

Мы можем использовать rle для этого

f1 <- function(vec1, patvec) {
     with(rle(vec1), lengths[as.logical(values)]) == length(patvec)
  }

f1(v1, pat)
#[1] TRUE
f1(v2, pat)
#[1] FALSE

или split вектора по rleid вектора, а затем проверьте, найдены ли all элементы шаблона вектора

any(sapply(split(v1, data.table::rleid(v1)), function(x) all(pat %in% x)))
#[1] TRUE

данные

pat <- c(1, 1)
v1 <- c(0,1,1,0)
v2 <- c(0,1,1,1) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...