簡體   English   中英

R:使用 strsplit() 在兩個字符之間拆分字符串

[英]R: splitting a string between two characters using strsplit()

假設我有以下字符串:

s <- "ID=MIMAT0027618;Alias=MIMAT0027618;Name=hsa-miR-6859-5p;Derives_from=MI0022705"

我想恢復";"之間的字符串"="得到以下輸出:

[1] "MIMAT0027618"  "MIMAT0027618"  "hsa-miR-6859-5p"  "MI0022705"

我可以將strsplit()與多個拆分元素一起使用嗎?

1) strsplit 與矩陣試試這個:

> matrix(strsplit(s, "[;=]")[[1]], 2)[2,]
[1] "MIMAT0027618"    "MIMAT0027618"    "hsa-miR-6859-5p" "MI0022705"   

2) 使用 gsub進行strsplit或使用帶有gsubstrsplit

> strsplit(gsub("[^=;]+=", "", s), ";")[[1]]
[1] "MIMAT0027618"    "MIMAT0027618"    "hsa-miR-6859-5p" "MI0022705"     

3)具有子或此使用的strsplit strsplitsub

> sub(".*=", "", strsplit(s, ";")[[1]])
[1] "MIMAT0027618"    "MIMAT0027618"    "hsa-miR-6859-5p" "MI0022705"   

4)strapplyc或 this 在等號后提取連續的非分號:

> library(gsubfn)
> strapplyc(s, "=([^;]+)", simplify = unlist)
[1] "MIMAT0027618"    "MIMAT0027618"    "hsa-miR-6859-5p" "MI0022705"  

添加了額外的strplit解決方案。

我知道這是一個老問題,但我發現使用環視正則表達式來解決這個問題非常優雅:

library(stringr)
your_string <- '/this/file/name.txt'
result <- str_extract(string = your_string, pattern = "(?<=/)[^/]*(?=\\.)")
result

用一句話來說,

  1. (?<=...)部分所需的字符串之前查找... (在本例中為正斜杠)。
  2. [^/]*然后在一行中查找盡可能多的不是正斜杠的字符(在本例中為name.txt )。
  3. (?=...)然后為所需的字符串后看起來... (在這種情況下的特殊時期字符,它需要被轉義為\\\\.

這也適用於數據幀:

library(dplyr)
strings <- c('/this/file/name1.txt', 'tis/other/file/name2.csv')
df <- as.data.frame(strings) %>% 
  mutate(name = str_extract(string = strings, pattern = "(?<=/)[^/]*(?=\\.)"))
# Optional
names <- df %>% pull(name)

或者,就您而言:

your_string <- "ID=MIMAT0027618;Alias=MIMAT0027618;Name=hsa-miR-6859-5p;Derives_from=MI0022705" 
result <- str_extract(string = your_string, pattern = "(?<=;Alias=)[^;]*(?=;)") 
result # Outputs 'MIMAT0027618'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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