我在数据框中有一个列,其中包含格式的长文本序列(通常为数千个字符):
p <- ggplot(data = d, aes(factor(group), r)) +
geom_boxplot() +
stat_summary(geom="text", fun.y=quantile,
aes(label=sprintf("%1.0f", ..y..)),
position=position_nudge(x=0.33), size=3)+
facet_wrap(~group2, scales = "free_x") +
geom_text(data = un, aes(x = group, y = 50, label = lab))
即。一个字符串,括号中的后缀,然后是分隔符
我试图计算R中的语法以删除以(VR)结尾的项目,包括尾随管道(如果存在),以便我离开:
abab(VR) | ddee(NR) | def(NR) | fff(VR) | oqq | pqq | ppf(VR)
我无法找出会删除这些条目的正则表达式(或gsub),并且想请求是否有人可以帮助我。
答案 0 :(得分:1)
以下是使用strsplit
和paste
与崩溃参数的方法:
paste(sapply(strsplit(temp, split=" +\\| +"),
function(i) { i[setdiff(seq_along(i), grep("\\(VR\\)$", i))] }),
collapse=" | ")
[1] "ddee(NR) | def(NR) | oqq | pqq"
我们在管道和空格上拆分,然后将结果列表提供给sapply
,grep
使用setdiff
函数删除以“(VR)”结尾的向量的任何元素。最后,结果粘贴在一起。
我添加了一个带有{{1}}的子集方法,这样没有任何“(VR)”的向量将返回而不做任何修改。
答案 1 :(得分:1)
如果您想使用gsub
,可以分两个阶段删除模式:
gsub(" \\| $", "", gsub("\\w+\\(VR\\)( \\| )?", "", s))
# firstly remove all words ending with (VR) and optional | following the pattern and
# then remove the possible | at the end of the string
# [1] "ddee(NR) | def(NR) | oqq | pqq"
\\w+\\(VR\\)
将匹配以(VR)
结尾的单词,括号将由\\
转义; ( \\| )?
匹配可选分隔符|
,这可确保它在字符串的中间和末尾都匹配模式; |
可以被第二个gsub
删除;