【问题标题】:Create two column with multiple separators创建具有多个分隔符的两列
【发布时间】:2020-11-05 20:55:08
【问题描述】:

我有一个数据框,例如

COl1
scaffold_97606_2-BACs_-__SP1_1
UELV01165908.1_2-BACs_+__SP2_2
UXGC01046554.1_9-702_+__SP3_3
scaffold_12002_1087-1579_-__SP4_4

我想将两者分成两列并得到:

COL1           COL2 
scaffold_97606 2-BACs_-__SP1_1
UELV01165908.1 2-BACs_+__SP2_2
UXGC01046554.1 9-702_+__SP3_3
scaffold_12002 1087-1579_-__SP4_4

所以你可以看到分隔符的变化,它可以是.Number_Number_Number

到目前为止我写的;

df2 <- df1 %>%
    separate(COL1, paste0('col', 1:2), sep = " the separator patterns ", extra = "merge")

但我不知道应该在" the separator patterns "part 中使用什么分隔符

【问题讨论】:

  • 仅作记录:OP 尝试描述为here。这不仅仅是一个 gimme-teh-codez 请求。

标签: r regex dataframe csv


【解决方案1】:

你可以使用

> df1 %>%
    separate(COl1, paste0('col', 1:2), sep = "(?<=\\d)_(?=\\d+-)", extra = "merge")
            col1               col2
1 scaffold_97606    2-BACs_-__SP1_1
2 UELV01165908.1    2-BACs_+__SP2_2
3 UXGC01046554.1     9-702_+__SP3_3
4 scaffold_12002 1087-1579_-__SP4_4

regex demo

模式详情

  • (?&lt;=\d) - 正向向后看,需要紧跟当前位置左侧的数字
  • _ - 下划线
  • (?=\d+-) - 需要一位或多位数字的正向前瞻,然后在当前位置右侧紧邻 -

【讨论】:

    【解决方案2】:

    您可以使用extract

    tidyr::extract(df, COl1, c('Col1', 'Col2'), regex = '(.*?\\d+)_(.*)')
    
    #            Col1               Col2
    #1 scaffold_97606    2-BACs_-__SP1_1
    #2 UELV01165908.1    2-BACs_+__SP2_2
    #3 UXGC01046554.1     9-702_+__SP3_3
    #4 scaffold_12002 1087-1579_-__SP4_4
    

    数据

    df <- structure(list(COl1 = c("scaffold_97606_2-BACs_-__SP1_1", 
    "UELV01165908.1_2-BACs_+__SP2_2", 
    "UXGC01046554.1_9-702_+__SP3_3", "scaffold_12002_1087-1579_-__SP4_4"
    )), class = "data.frame", row.names = c(NA, -4L))
    

    【讨论】:

      猜你喜欢
      • 2022-01-17
      • 2022-01-18
      • 1970-01-01
      • 2015-07-25
      • 1970-01-01
      • 1970-01-01
      • 2018-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多