【问题标题】:Select columns by regex matching通过正则表达式匹配选择列
【发布时间】:2018-08-24 19:19:41
【问题描述】:

我知道有很多关于此的帖子,但我找不到任何有帮助的帖子。我想做的很简单。

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

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:]")

如果可能,我正在寻找使用stringrdplyr 的解决方案。看起来这应该很简单。

【问题讨论】:

    标签: r dplyr stringr


    【解决方案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
    

    【讨论】:

    • facepalm. 好的,效果很好。只是好奇为什么在使用 str_view_all 时不需要额外的括号。
    • @LloydChristmas 好问题,我没有答案。 [:alpha:] 是所谓的 POSIX 字符类,只会在 inside 括号表达式 [...] 中进行评估。 [:alpha:] 本身仅表示您正在匹配字符 :alph。这就是为什么你的 str_view_all 示例首先起作用的原因让我感到困惑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    • 2018-01-08
    相关资源
    最近更新 更多