分割由多个分隔符(正则表达式)分隔的字符串

问题描述 投票:0回答:1

我的数据结构如下:

df <- data.frame(SampleID = c(
  "Akt.B.M_1867_1:100", "Akt.B.M_1869_1:100", "Akt.B.M_1871_1:100",
  "Akt.B.M_1878_1:100", "M.M.K_1259_1:100",   "M.M.K_1262_1:100",
  "M.M.K_1264_1:100",   "M.M.K_1272_1:100",   "SKO.Shard_30_1:100",
  "SKO.Shard_32_1:100", "SKO.Shard_45_1:100", "Zh.San_618_1:100",
  "Zh.San_624_1:100",   "Zh.San_629_1:100"
))

我想提取第一个句号前面的字符和下划线包围的字符,并将它们放入后续的两列中。 我尝试使用

separate_wider_delim
,但有些条目有一个句点,有些条目有两个句点。 我该如何在
separate_wider_regex
中执行此操作,或者有没有更好的方法而不使用此功能?

谢谢

r regex string
1个回答
0
投票

使用最后注释中的输入使用

separate_wider_regex
,如图:

library(dplyr)
library(tidyr)

df %>%
  separate_wider_regex(SampleID, c(A = "[^.]*", "\\..*_", B = ".*", "_.*"), 
    cols_remove = FALSE)

给予

# A tibble: 14 × 3
   A     B     SampleID          
   <chr> <chr> <chr>             
 1 Akt   1867  Akt.B.M_1867_1:100
 2 Akt   1869  Akt.B.M_1869_1:100
 3 Akt   1871  Akt.B.M_1871_1:100
 4 Akt   1878  Akt.B.M_1878_1:100
 5 M     1259  M.M.K_1259_1:100  
 6 M     1262  M.M.K_1262_1:100  
 7 M     1264  M.M.K_1264_1:100  
 8 M     1272  M.M.K_1272_1:100  
 9 SKO   30    SKO.Shard_30_1:100
10 SKO   32    SKO.Shard_32_1:100
11 SKO   45    SKO.Shard_45_1:100
12 Zh    618   Zh.San_618_1:100  
13 Zh    624   Zh.San_624_1:100  
14 Zh    629   Zh.San_629_1:100  

注意

df <- data.frame(SampleID = c(
    "Akt.B.M_1867_1:100", "Akt.B.M_1869_1:100", "Akt.B.M_1871_1:100",
    "Akt.B.M_1878_1:100", "M.M.K_1259_1:100", "M.M.K_1262_1:100",
    "M.M.K_1264_1:100", "M.M.K_1272_1:100", "SKO.Shard_30_1:100",
    "SKO.Shard_32_1:100", "SKO.Shard_45_1:100", "Zh.San_618_1:100",
    "Zh.San_624_1:100", "Zh.San_629_1:100"
  )
)
© www.soinside.com 2019 - 2024. All rights reserved.