【问题标题】:R regex escape not working with variable namesR 正则表达式转义不适用于变量名
【发布时间】:2016-07-19 18:05:22
【问题描述】:

我正在尝试根据列名在 R 中的数据框中选择列。我想要列名包含“活动”、“主题”或“原始数据集”或以“mean()”或“std()”结尾的列。当我这样做时

colselection <- grep('mean\\(\\)$|std\\(\\)$|subject|activity|originaldataset',
                     colnames(completedf))
selectdf <- completedf[,colselection]

我只得到带有“activity”、“subject”或“originaldataset”的列,没有以“mean()”或“std()”结尾的列。注意:“completedf”是原始的完整数据框。

列名示例:tBodyAccMag-mean()、tBodyAccMag-std()、tBodyAccJerkMag-mean()、tBodyAccJerkMag-std()。这些名称是从带有read.table 的文本文件中读取的,并且带有名称的列被放置在一个字符向量中,该字符向量稍后用于数据框“completedf”中的列名。

我在 Ubuntu 16.10 上运行 R Studio 版本 0.99.902 和 R 版本 3.2.3 (2015-12-10)。

【问题讨论】:

  • 你正在转义$,这是不需要的,即grep('mean\\(\\)$|std\\(\\)$|subject|activity|originaldataset', colnames(completedf))
  • R 中,我们需要 \\ 而不是单个 \。
  • 如果我执行code'grep('mean\\(\\)$', colnames(completedf), value = TRUE),我会得到一个空字符向量。我也得到一个没有 $ 的空字符向量。很奇怪。
  • 使用grep('mean[:punct:]$', colnames(completedf), value = TRUE)也得到一个空结果
  • 你没有显示列名,所以我们不知道你有什么。

标签: regex r escaping


【解决方案1】:

感谢我目前正在关注的 R 课程的参与者。

R中列名不能包含括号,所以R用标点符号代替括号。

例如:

fBodyBodyGyroJerkMag.std()

变成

fBodyBodyGyroJerkMag.std..

等等。这就是为什么带标点符号的正则表达式有效,而带括号的则无效。

【讨论】:

    猜你喜欢
    • 2022-06-10
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    • 2015-08-12
    • 2012-02-20
    相关资源
    最近更新 更多