есть ли лучший и быстрый способ достижения нижеследующего? В принципе, я ищу (ищет) шаблон в кадре данных.pattern поиск по векторам в R
Ниже работает для меня. Но я не могу его масштабировать. Сложность по времени - это действительно моя забота.
searchPattern <- function(ls, pattern){
sapply(ls, function(x) {
tmp <- all(table(x)[names(table(pattern))]>=table(pattern))
ifelse(is.na(tmp),FALSE,tmp)
})
}
pattern <- c(5,1)
df <- list(1,c(1,7,4,5),c(6,5,1,1),5:10,c(5,5,1,1))
df
searchPattern(df,pattern)
Результаты является логическим вектор:
[1] FALSE TRUE TRUE FALSE TRUE
Узор в этом примере просто c(5,1)
, но зацикливается, чтобы получить различные узоры, как 1,c(1,7,4,5),c(6,5,1,1),5:10,c(5,5,1,1)
На основании этого я несу из другой трансформации позже. Каков идеальный и быстрый способ сделать это? приветствуется любое предложение.
Может быть что-то вроде 'vapply (ДФ, функция (х) длина (пересекаются (х, рисунок)) == Длина (рисунок) , логический (1L)). – A5C1D2H2I1M1N2O1R2T1
Используйте функцию 'map' из пакета' purrr' для эффективности: 'map (df, function (x) length (intersect (pattern, x)) == length (pattern))'. Вы также можете использовать базу «Карта»: «Карта (функция (x) length (intersect (pattern, x)) == length (pattern), df)'. – Abdou
Thx. Но функция должна возвращать '[1] FALSE FALSE TRUE FALSE TRUE' для' pattern <- c (5,1,1) ', а не' [1] FALSE FALSE FALSE FALSE FALSE' –