提取 | 之间的最后一个词|
Extract the last word between | |
我有以下数据集
> head(names$SAMPLE_ID)
[1] "Bacteria|Proteobacteria|Gammaproteobacteria|Pseudomonadales|Moraxellaceae|Acinetobacter|"
[2] "Bacteria|Firmicutes|Bacilli|Bacillales|Bacillaceae|Bacillus|"
[3] "Bacteria|Proteobacteria|Gammaproteobacteria|Pasteurellales|Pasteurellaceae|Haemophilus|"
[4] "Bacteria|Firmicutes|Bacilli|Lactobacillales|Streptococcaceae|Streptococcus|"
[5] "Bacteria|Firmicutes|Bacilli|Lactobacillales|Streptococcaceae|Streptococcus|"
[6] "Bacteria|Firmicutes|Bacilli|Lactobacillales|Streptococcaceae|Streptococcus|"
我想提取 ||
之间的最后一个词作为新变量,即
Acinetobacter
Bacillus
Haemophilus
我试过使用
library(stringr)
names$sample2 <- str_match(names$SAMPLE_ID, "|.*?|")
^.*\|\K.*?(?=\|)
使用 \K
从最后 matche.See 中删除其余部分 demo.Also 使用 perl=T
https://regex101.com/r/fM9lY3/45
x <- c("Bacteria|Firmicutes|Bacilli|Lactobacillales|Streptococcaceae|Streptococcus|",
"Bacteria|Firmicutes|Bacilli|Lactobacillales|Streptococcaceae|Streptococcus|" )
unlist(regmatches(x, gregexpr('^.*\|\K.*?(?=\|)', x, perl = TRUE)))
# [1] "Streptococcus" "Streptococcus"
我们可以使用
library(stringi)
stri_extract_last_regex(v1, '\w+')
#[1] "Acinetobacter"
数据
v1 <- "Bacteria|Proteobacteria|Gammaproteobacteria|Pseudomonadales|Moraxellaceae|Acinetobacter|"
仅使用基础 R:
myvar <- gsub("^..*\|(\w+)\|$", "\1", names$SAMPLE_ID)
结局就是你想要的[^|]+(?=\|$)
根据@RichardScriven 的说法:
Which in R would be regmatches(x, regexpr("[^|]+(?=\|$)", x, perl = TRUE)
在这种情况下,您也可以使用包 "stringr"。这是代码:
v<- "Bacteria|
Proteobacteria|Gammaproteobacteria|Pseudomonadales|Moraxellaceae|Acinetobacter|"
v1<- str_replace_all(v, "\|", " ")
word(v1,-2)
这里我用了v作为字符串。基本理论是将所有的|
替换为空格,然后使用函数word()
.
得到字符串中的最后一个单词
我有以下数据集
> head(names$SAMPLE_ID)
[1] "Bacteria|Proteobacteria|Gammaproteobacteria|Pseudomonadales|Moraxellaceae|Acinetobacter|"
[2] "Bacteria|Firmicutes|Bacilli|Bacillales|Bacillaceae|Bacillus|"
[3] "Bacteria|Proteobacteria|Gammaproteobacteria|Pasteurellales|Pasteurellaceae|Haemophilus|"
[4] "Bacteria|Firmicutes|Bacilli|Lactobacillales|Streptococcaceae|Streptococcus|"
[5] "Bacteria|Firmicutes|Bacilli|Lactobacillales|Streptococcaceae|Streptococcus|"
[6] "Bacteria|Firmicutes|Bacilli|Lactobacillales|Streptococcaceae|Streptococcus|"
我想提取 ||
之间的最后一个词作为新变量,即
Acinetobacter
Bacillus
Haemophilus
我试过使用
library(stringr)
names$sample2 <- str_match(names$SAMPLE_ID, "|.*?|")
^.*\|\K.*?(?=\|)
使用 \K
从最后 matche.See 中删除其余部分 demo.Also 使用 perl=T
https://regex101.com/r/fM9lY3/45
x <- c("Bacteria|Firmicutes|Bacilli|Lactobacillales|Streptococcaceae|Streptococcus|",
"Bacteria|Firmicutes|Bacilli|Lactobacillales|Streptococcaceae|Streptococcus|" )
unlist(regmatches(x, gregexpr('^.*\|\K.*?(?=\|)', x, perl = TRUE)))
# [1] "Streptococcus" "Streptococcus"
我们可以使用
library(stringi)
stri_extract_last_regex(v1, '\w+')
#[1] "Acinetobacter"
数据
v1 <- "Bacteria|Proteobacteria|Gammaproteobacteria|Pseudomonadales|Moraxellaceae|Acinetobacter|"
仅使用基础 R:
myvar <- gsub("^..*\|(\w+)\|$", "\1", names$SAMPLE_ID)
结局就是你想要的[^|]+(?=\|$)
根据@RichardScriven 的说法:
Which in R would be regmatches(x, regexpr("[^|]+(?=\|$)", x, perl = TRUE)
在这种情况下,您也可以使用包 "stringr"。这是代码:
v<- "Bacteria|
Proteobacteria|Gammaproteobacteria|Pseudomonadales|Moraxellaceae|Acinetobacter|"
v1<- str_replace_all(v, "\|", " ")
word(v1,-2)
这里我用了v作为字符串。基本理论是将所有的|
替换为空格,然后使用函数word()
.