带“|”的 gsub R中的字符

gsub with "|" character in R

我有一个数据框,其中的字符串位于一个带有 | 字符的变量下。我想要的是删除 | 字符下游的所有内容。

例如,考虑字符串

heat-shock protein hsp70, putative | location=Ld28_v01s1:1091329-1093293(-) | length=654 | sequence_SO=chromosome | SO=protein_coding

我只想拥有:

heat-shock protein hsp70, putative

| 字符需要任何转义字符吗?

如果我这样做:

a <- c("foo_5", "bar_7")
gsub("*_.", "", a)

我得到:

[1] "foo" "bar"

即我正在删除 _ 字符下游的所有内容。

但是,如果我用 | 而不是 _ 重复相同的任务:

b <- c("foo|5", "bar|7")
gsub("*|.", "", a)

我得到:

[1] "" ""

您必须通过添加 \| 来转义 |。试试这个

> gsub("\|.*$", "", string)
[1] "heat-shock protein hsp70, putative "

其中 string

string <- "heat-shock protein hsp70, putative | location=Ld28_v01s1:1091329-1093293(-) | length=654 | sequence_SO=chromosome | SO=protein_coding"

此替代方案删除输出中行尾的 space

 gsub("\s+\|.*$", "", string)
[1] "heat-shock protein hsp70, putative"

也许 strsplitgsub

更好

是的,看起来管道确实需要转义。

string <- "heat-shock protein hsp70, putative | location=Ld28_v01s1:1091329-1093293(-) | length=654 | sequence_SO=chromosome | SO=protein_coding"
strsplit(string, ' \| ')[[1]][1]

输出

"heat-shock protein hsp70, putative"

请注意,我假设您只需要第一个管道之前的文本,并且您想要删除将管道与您关心的字符串部分分开的 space。