通过正则表达式匹配选择列

时间:2018-08-24 19:19:41

标签: r dplyr stringr

我知道有很多相关的文章,但是找不到任何有帮助的文章。我想做的很简单。

我要根据列名中是否存在字母来选择(或删除)列。

library(tibble)
library(stringr)
library(dplyr)

xy <- tibble("x" = 1:5, "123" = 6:10, "x123" = 11:15)

#does not have expected output
> xy %>% select(-matches("[:alpha:]"))
# A tibble: 5 x 3
      x `123`  x123
  <int> <int> <int>
1     1     6    11
2     2     7    12
3     3     8    13
4     4     9    14
5     5    10    15

但是,如果我使用str_view_all,则所有结果均符合预期,但无法与dplyr辅助函数matches一起用于选择列。

str_view_all(x, "[:alpha:]")

enter image description here

我正在寻找使用stringrdplyr的解决方案。看来这应该非常简单。

1 个答案:

答案 0 :(得分:1)

[:alpha:]是POSIX字符类,仅在带括号的表达式内有效。因此,您需要额外的一对括号:

xy <- tibble("x" = 1:5, "123" = 6:10, "x123" = 11:15)

xy %>% select(-matches("[[:alpha:]]"))

结果:

# A tibble: 5 x 1
  `123`
  <int>
1     6
2     7
3     8
4     9
5    10