通过改变r中的位置分隔字符列



我有麻烦拆分一个简单的字符列3列取决于列的内容。一个很简单的例子:

data <- data.frame(x = c("GUIC01", "GUI02"))
> data
       x
1 GUIC01
2  GUI02

我想创建列,生成如下:

> desired
       x Parc TipusBassa Num
1 GUIC01  GUI          C  01
2  GUI02  GUI       <NA>  02

基本上,如果单元格中间有一个c,它必须"创建"一个列,其中显示并分割单元格的其余内容。到目前为止,我尝试了以下方法:

data<-if_else(nchar(data$x) == 5, 
                separate(data, into = c('Parc','Num'), sep = c(3)), 
                separate(data, into = c('Parc', 'TipusBassa','Num'), sep = c(3,4)))

我错过了什么?谢谢!

我们可以在这里使用基字符串函数:

data$TipusBass <- ifelse(sub("^.*(.).{2}$", "\1", data$x) == "C", "C", NA)
data$Num <- sub("^.*(..)$", "\1", data$x)
data
       x TipusBass Num
1 GUIC01         C  01
2  GUI02      <NA>  02

数据:

data <- data.frame(x = c("GUIC01", "GUI02"))

您可以使用tidyr::extract并传递regex来提取不同列中的值。

tidyr::extract(data, x, c('Parc', 'TipusBassa', 'Num'), 
               '([A-Z]{3})([A-Z]?)([0-9]{2})', remove = FALSE)
#       x Parc TipusBassa Num
#1 GUIC01  GUI          C  01
#2  GUI02  GUI             02