[英]extract substring between "-" and "-" in string in R
我有一個看起來像這樣的字符串列表:
list=["chr21-10139833-AC","chry-10139832-bf"]
對於列表中的每個字符串,我需要提取“-”和“-”之間的數字
所以我會得到:
[10139833,10139832]
我試過這個:
gsub(".*[-]([^-]+)[-]", "\\1", list
但它返回:
[ac,bf]
我該怎么做才能讓它發揮作用? 謝謝你
使用str_extract
中的stringr
我們可以嘗試:
list <- c("chr21-10139833-A-C", "chry-10139832-b-f")
nums <- str_extract(list, "(?<=-)(\\d+)(?=-)")
nums
[1] "10139833" "10139832"
我們還可以將sub
用於基礎 R 選項:
list <- c("chr21-10139833-A-C", "chry-10139832-b-f")
nums <- sub(".*-(\\d+).*", "\\1", list)
nums
[1] "10139833" "10139832"
您可以使用str_split_i
獲取第i
個拆分字符串:
library(stringr)
str <- c("chr21-10139833-A-C", "chry-10139832-b-f")
str_split_i(str, "-", i = 2)
#[1] "10139833" "10139832"
1)使用末尾注釋中顯示的輸入,使用read.table
。 如果您想要字符輸出,請將colClasses = "character"
參數添加到read.table
。
read.table(text = x, sep = "-")[[2]]
## [1] 10139833 10139832
2)另一種可能性是使用strapply
。 如果你想要字符輸出,那么省略as.numeric
參數。
library(gsubfn)
strapply(x, "-(\\d+)-", as.numeric, simplify = TRUE)
## [1] 10139833 10139832
x <- c("chr21-10139833-A-C", "chry-10139832-b-f")
如果您的字符串的結構和字符總是像單詞字符和連字符那樣,您可以在單詞邊界之間匹配 1+ 個數字:
library(stringr)
list <- c("chr21-10139833-A-C", "chry-10139832-b-f")
str_extract(list, "\\b\\d+\\b")
或者使用類似 perl 的模式和\K
你也可以使用
list <- c("chr21-10139833-A-C", "chry-10139832-b-f")
regmatches(list, regexpr("-\\K\\d+(?=-)", list, perl = TRUE))
兩者都會輸出:
[1] "10139833" "10139832"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.