Регулярные выражения (RegEx) и dplyr:: filter()

У меня есть простой фрейм данных, который выглядит так:

x <- c("aa", "aa", "aa", "bb", "cc", "cc", "cc")
y <- c(101, 102, 113, 201, 202, 344, 407)
df = data.frame(x, y)    

    x   y
1   aa  101
2   aa  102
3   aa  113
4   bb  201
5   cc  202
6   cc  344
7   cc  407

Я хотел бы использовать dplyr:: filter() и RegEx для фильтрации всех наблюдений y, которые начинаются с числа 1

Мне кажется, что код будет выглядеть примерно так:

df %>%
  filter(y != grep("^1")) 

Но я получаю Error in grep("^1") : argument "x" is missing, with no default

Ответ 1

Вам нужно дважды проверить документацию на grepl и filter.

Для grep/grepl вам также необходимо указать вектор, который вы хотите проверить (в этом случае y), а filter - логический вектор (т.е. вам нужно использовать grepl). Если вы хотите указать индексный вектор (от grep), вы можете использовать slice.

df %>% filter(!grepl("^1", y))

Или с индексом, полученным из grep:

df %>% slice(grep("^1", y, invert = TRUE))

Но вы также можете просто использовать substr, потому что вас интересует только первый символ:

df %>% filter(substr(y, 1, 1) != 1)