如何用dplyr的matches正则筛选数据框中1234-mean列?
使用dplyr::select结合matches筛选指定列的解决方法
问题描述
我的数据框包含以下列名:
- 1234-sd
- 1234-abs
- 1234-mean
- 1234-min
希望通过dplyr::select结合matches方法筛选出仅1234-mean列,尝试了dplyr::select(matches("^1234-*(!mean)"))但未生效,求可行解决方法。
可行解决方案
方案1:精准正则匹配
直接用精确正则锁定目标列,确保只命中1234-mean:
dplyr::select(df, matches("^1234-mean$"))
^匹配列名开头,$匹配列名结尾,避免误匹配类似1234-mean-extra的列(如果存在)
方案2:直接指定列名(更直观)
如果列名固定,无需正则,直接用反引号包裹含特殊字符的列名即可:
dplyr::select(df, `1234-mean`)
原写法失效原因
你原正则^1234-*(!mean)存在两个问题:
-*表示匹配0个或多个连字符,不符合你的列名结构(列名只有一个连字符)(!mean)不是正则的否定语法,且你的需求是保留mean列,原逻辑本身方向错误
内容的提问来源于stack exchange,提问作者Ai4l2s
相关产品推荐
相关产品推荐

