Фильтровать выбранные столбцы с несколькими шаблонами str_detect - PullRequest
0 голосов
/ 09 марта 2019

То, что я должен сделать, должно быть довольно легко, но, будучи новичком, я потратил слишком много времени, пытаясь достичь этого. С помощью этого сценария я пытаюсь отфильтровать ВСЕ наблюдения из фрейма данных, которые содержат ЛЮБОЙ из упомянутых паттернов.

Сценарий:

df1 <- filter_at(df, vars(contains("Pair")), 
                 any_vars(str_detect(., pattern="quinoaquinoa|lupinelupine", negate=TRUE)))

Я не получаю никакой ошибки при запуске, но ничего не меняется и выражения не вынимаются из кадра данных. Поскольку я понимаю эти функции, я мог бы также поставить ! перед str_detect вместо negate=TRUE, однако ни одна из них не работает.

Обратите внимание, что кадр данных на самом деле больше (имеет столбцы, отличные от столбцов, содержащих "Pair", и шаблоны для фильтрации всегда будут другими и извлекаются из другого кадра данных.

Фрейм данных выглядит следующим образом:

str(df)

'data.frame':   653 obs. of  6 variables:
 $ Pair_1: Factor w/ 7 levels "grasscloverleycamelina",..: 3 7 7 3 3 3 7 6 6 6 ...
 $ Pair_2: Factor w/ 20 levels "camelinacamelina",..: 10 6 6 8 8 10 6 8 8 10 ...
 $ Pair_3: Factor w/ 20 levels "camelinacamelina",..: 19 20 20 20 19 19 20 20 20 16 ...
 $ Pair_4: Factor w/ 23 levels "camelinacamelina",..: 9 8 8 8 9 9 4 1 1 5 ...
 $ Pair_5: Factor w/ 20 levels "camelinacamelina",..: 9 12 16 16 13 13 12 12 11 11 ...
 $ Pair_6: Factor w/ 20 levels "camelinacamelina",..: 20 13 9 17 20 20 5 7 8 8 ...

dput фрейм данных:

structure(list(Pair_1 = structure(c(3L, 7L, 7L, 3L, 3L, 3L), .Label = c("grasscloverleycamelina", 
"grasscloverleyquinoa", "lupinecamelina", "lupinegrasscloverley", 
"lupinelupine", "lupinequinoa", "lupinespringcereal"), class = "factor"), 
    Pair_2 = structure(c(10L, 6L, 6L, 8L, 8L, 10L), .Label = c("camelinacamelina", 
    "camelinagrasscloverley", "camelinalupine", "camelinaquinoa", 
    "camelinaspringcereal", "grasscloverleycamelina", "grasscloverleygrasscloverley", 
    "grasscloverleylupine", "grasscloverleyquinoa", "grasscloverleyspringcereal", 
    "quinoacamelina", "quinoagrasscloverley", "quinoalupine", 
    "quinoaquinoa", "quinoaspringcereal", "springcerealcamelina", 
    "springcerealgrasscloverley", "springcereallupine", "springcerealquinoa", 
    "springcerealspringcereal"), class = "factor"), Pair_3 = structure(c(19L, 
    20L, 20L, 20L, 19L, 19L), .Label = c("camelinacamelina", 
    "camelinagrasscloverley", "camelinalupine", "camelinaquinoa", 
    "camelinaspringcereal", "grasscloverleycamelina", "grasscloverleygrasscloverley", 
    "grasscloverleylupine", "grasscloverleyquinoa", "grasscloverleyspringcereal", 
    "quinoacamelina", "quinoagrasscloverley", "quinoalupine", 
    "quinoaquinoa", "quinoaspringcereal", "springcerealcamelina", 
    "springcerealgrasscloverley", "springcereallupine", "springcerealquinoa", 
    "springcerealspringcereal"), class = "factor"), Pair_4 = structure(c(9L, 
    8L, 8L, 8L, 9L, 9L), .Label = c("camelinacamelina", "camelinagrasscloverley", 
    "camelinalupine", "camelinaquinoa", "camelinaspringcereal", 
    "grasscloverleycamelina", "grasscloverleygrasscloverley", 
    "grasscloverleyquinoa", "grasscloverleyspringcereal", "lupinecamelina", 
    "lupinegrasscloverley", "lupinelupine", "lupinequinoa", "lupinespringcereal", 
    "quinoacamelina", "quinoagrasscloverley", "quinoaquinoa", 
    "quinoaspringcereal", "springcerealcamelina", "springcerealgrasscloverley", 
    "springcereallupine", "springcerealquinoa", "springcerealspringcereal"
    ), class = "factor"), Pair_5 = structure(c(9L, 12L, 16L, 
    16L, 13L, 13L), .Label = c("camelinacamelina", "camelinagrasscloverley", 
    "camelinaquinoa", "camelinaspringcereal", "grasscloverleycamelina", 
    "grasscloverleygrasscloverley", "grasscloverleyquinoa", "grasscloverleyspringcereal", 
    "lupinecamelina", "lupinegrasscloverley", "lupinequinoa", 
    "lupinespringcereal", "quinoacamelina", "quinoagrasscloverley", 
    "quinoaquinoa", "quinoaspringcereal", "springcerealcamelina", 
    "springcerealgrasscloverley", "springcerealquinoa", "springcerealspringcereal"
    ), class = "factor"), Pair_6 = structure(c(20L, 13L, 9L, 
    17L, 20L, 20L), .Label = c("camelinacamelina", "camelinagrasscloverley", 
    "camelinaquinoa", "camelinaspringcereal", "grasscloverleycamelina", 
    "grasscloverleygrasscloverley", "grasscloverleyquinoa", "grasscloverleyspringcereal", 
    "lupinecamelina", "lupinegrasscloverley", "lupinequinoa", 
    "lupinespringcereal", "quinoacamelina", "quinoagrasscloverley", 
    "quinoaquinoa", "quinoaspringcereal", "springcerealcamelina", 
    "springcerealgrasscloverley", "springcerealquinoa", "springcerealspringcereal"
    ), class = "factor")), row.names = c(NA, 6L), class = "data.frame")

Ответы [ 2 ]

0 голосов
/ 09 марта 2019

Вы можете перебрать столбец, у которого есть «Pair» в проверке кадра данных, присутствует ли требуемый шаблон или нет, создать матрицу логических векторов и выбрать строки, в которых шаблон не встречается.

cols <- grep("Pair", names(df))
df[rowSums(sapply(df[cols],function(x) grepl("quinoaquinoa|lupinelupine", x)))== 0, ]
0 голосов
/ 09 марта 2019

В вашем кадре данных нет строки, содержащей "квиноахиноа" или "люпинелупин". Я думаю, что шаблон, который вы используете, неверен. Это работает: filter_at(df, vars(contains("Pair")), any_vars(str_detect(., pattern = "quinoa|lupine")))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...