【问题标题】:Cleaning data which to use (Grep) or (str_extract_all)清理要使用的数据 (Grep) 或 (str_extract_all)
【发布时间】:2016-11-18 12:02:38
【问题描述】:

我需要从数据集中提取所有提到“均值”和“标准差”的元素。

feat 中如何编写的示例,第 2 列,变量。

Goal> 我正在尝试仅提取已写入此内容的元素。

"tBodyAcc-mean()-Z"
"tBodyAcc-std()-X"

feat<-read.table("features.txt")

我假设使用

grep("mean"&"std",feat[,2])

会工作

但是不起作用,我有这个错误:

 "operations are possible only for numeric, logical or complex types"

我发现有人用过这个:

meansd<-grep("-(mean|std)\\(\\)",feat[,2]) 

效果很好,但我不明白反弹的含义。

我不明白它的确切含义,我不想使用它。

【问题讨论】:

  • 请展示一些可重现的例子
  • 试试grep('mean|std', feat[,2])或更复杂的正则表达式...
  • 请学习如何format your question text
  • drmariod 成功了。我只是认为因为是一个字符串,所以我必须使用 " 括号对我的向量说以找到该字符串并存储它。
  • 关于反斜杠:第一个反斜杠正在转义正则表达式元字符“(”和“)”,第二个反斜杠正在转义 R 保留字符“\”

标签: r regex string text-extraction


【解决方案1】:

您需要的是正则表达式模式中的alternation operator |grep 允许使用文字值(当使用 fixed=TRUE 时)或正则表达式(默认情况下)。

现在,你发现:

meansd<-grep("-(mean|std)\\(\\)",feat[,2])

-(mean|std)\(\) 正则表达式匹配-,然后是meanstd(因为(...)grouping construct,它允许在更大的表达式中枚举替代项),然后是(,然后是@ 987654333@(这些必须用 \ 文字符号转义 - 这就是它在 R 代码中加倍的原因)。

如果您认为表达式过于矫枉过正,并且只想查找以stdmean 作为子字符串的条目,则可以使用更简单的

meansd<-grep("mean|std",feat[,2])

这里不需要分组构造,因为表达式中只有两个选项。

【讨论】:

    猜你喜欢
    • 2017-08-12
    • 2022-01-09
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    • 2014-05-21
    • 1970-01-01
    • 2018-10-03
    • 1970-01-01
    相关资源
    最近更新 更多