我有麻烦拆分一个简单的字符列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