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