清理要使用的数据(Grep)或(str_extract_all)
问题描述:
我需要从数据集中提取所有提及“mean”和“std”(标准差)的元素。清理要使用的数据(Grep)或(str_extract_all)
它是如何写在专长,列2,变量的例子。
目标>我正在尝试仅提取已写入的元素。
"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])
它工作正常,但我不明白反斜杠的意思。
我不明白它到底意味着什么,我不想使用它。
答
你需要的是一个alternation operator|
在正则表达式模式。 grep
允许使用文字值(使用fixed=TRUE
时)或正则表达式(默认情况下)。现在
,你发现:
meansd<-grep("-(mean|std)\\(\\)",feat[,2])
的-(mean|std)\(\)
正则表达式匹配的-
,那么无论mean
或std
(因为(...)
是grouping construct,允许枚举一个更大的表达式中的替代品),然后(
然后)
(这些必须以\
文字符号转义 - 这就是为什么它在R代码中加倍的原因)。
如果你想表达的是一种矫枉过正,你只需要找到既std
或mean
条目子,你可以用一个简单的
meansd<-grep("mean|std",feat[,2])
在这里,没有分组构造是必要的,因为你只在表达中有两种选择。
请示出一些可重复的例子 – akrun
尝试'grep('mean | std',feat [,2])'或更复杂的正则表达式... – drmariod
请学习如何[格式化您的问题文本](http:// stackoverflow .com/editing-help) – Jaap