簡體   English   中英

在R中的字符串中提取“-”和“-”之間的子字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM