R 根据第n次出现的分隔符将列分隔为两列

R 根据第n次出现的分隔符将列分隔为两列,r,R,使用R,我需要做什么才能将下面表格A的col4拆分为下面表格B的col4a和col4b?我不知道如何让它工作,当可能不总是有第三个“-”分裂 表a: 可乐 可乐 可乐 可乐 数据 数据 数据 河马-11-trx-2021 数据 数据 数据 goose-17-plt-2017 数据 数据 数据 猴子-01-mno 数据 数据 数据 斑马-99-451-2019 您可以使用tidyr的extract: result <- tidyr::extract(df, col4, c('col4a',

使用R,我需要做什么才能将下面表格A的col4拆分为下面表格B的col4a和col4b?我不知道如何让它工作,当可能不总是有第三个“-”分裂

表a:

可乐 可乐 可乐 可乐 数据 数据 数据 河马-11-trx-2021 数据 数据 数据 goose-17-plt-2017 数据 数据 数据 猴子-01-mno 数据 数据 数据 斑马-99-451-2019
您可以使用
tidyr
extract

result <- tidyr::extract(df, col4, c('col4a', 'col4b'), 
                             '(\\w+-\\w+-\\w+)-?(\\d+)?$', convert = TRUE)
result

#    col1 col2 col3         col4a col4b
#1   data data data  hippo-11-trx  2021
#2   data data data  goose-17-plt  2017
#3   data data data monkey-01-mno    NA
#4   data data data  zebra-99-451  2019

result我找到了一个逐步解决方案:

#load string package
library(stringr)
然后根据col4是否以连字符和4位数字结尾创建col4b(使用grepl()和str_extract):


ifelse(grepl('.-[:digit:]{4}$',df$col4)=TRUE,df$col4b
#load string package
library(stringr)

ifelse(grepl('.*-[[:digit:]]{4}$', df$col4)==TRUE, df$col4b<-str_extract(df$col4, '[[:digit:]]{4}$'), NA)

df$col4<-str_remove(string=df$col4, pattern='-[[:digit:]]{4}$')


names(df)[names(df)=='col4']<-'col4a'

> df
    col1 col2 col3         col4a col4b
1   data data data  hippo-11-trx  2021
2   data data data  goose-17-plt  2017
3   data data data monkey-01-mno  <NA>
4   data data data  zebra-99-451  2019