chi*_*tra 5 regex r dataframe delimiter-separated-values
我有一个数据框,例如
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
Run Code Online (Sandbox Code Playgroud)
我想将两者分成两列并得到:
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
Run Code Online (Sandbox Code Playgroud)
所以你可以看到分隔符的变化,它可以是.Number_或 Number_Number
到目前为止,我写道;
df2 <- df1 %>%
separate(COL1, paste0('col', 1:2), sep = " the separator patterns ", extra = "merge")
Run Code Online (Sandbox Code Playgroud)
但我不知道我应该在这" the separator patterns "部分使用什么分隔符
您可以使用
> 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
Run Code Online (Sandbox Code Playgroud)
查看正则表达式演示
图案详情
(?<=\d) - 正向后视,需要在当前位置左侧紧接一个数字_ - 下划线(?=\d+-)- 正向前瞻,需要一位或多位数字,然后-立即在当前位置的右侧。You can use 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
Run Code Online (Sandbox Code Playgroud)
data
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))
Run Code Online (Sandbox Code Playgroud)