我有一个数据集,其中一列的格式为[A-Z][A-Z][0-1][0-9][0-1][0-1][0-1][0-9][0-9]
,即AC1200019
现在我想将此格式转换为[A-Z][A-Z][-][0-1][0-9][-][0-1][0-1][0-1][-][0-9][0-9]
,即AC-12-000-19
答案 0 :(得分:1)
([A-Z][A-Z])([0-1][0-9])([0-1][0-1][0-1])([0-9][0-9])
试试这个。$1-$2-$3-$4
或\\1-\\2-\\3-\\4
。请参阅演示。
答案 1 :(得分:1)
尝试
gsub('^([A-Z]{2})([0-1][0-9])([0-1]{3})([0-9]{2})', '\\1-\\2-\\3-\\4', str1)
#[1] "AC-12-000-19"
str1 <- 'AC1200019'
答案 2 :(得分:0)
假设整个列的字符数相同,这里是一个简单的版本。
library(stringr)
x <- data.frame(X1 = c("AC1510018", "AC1200019", "BT1801007"))
paste(str_sub(x$X1,1,2), str_sub(x$X1,3,4),
str_sub(x$X1,5,7), str_sub(x$X1,8,9) , sep= "-")
我喜欢dplyr套件,所以这里有一个使用dplyr和tidyr的版本:
library(dplyr)
library(tidyr)
x %>%
separate(X1, into = c("X2", "X3", "X4", "X5"), sep = c(2,4,7)) %>%
unite("X1", X2, X3, X4, X5, sep="-")
或
x %>%
transmute(X2 = paste(str_sub(X1,1,2), str_sub(X1,3,4),
str_sub(X1,5,7), str_sub(X1,8,9) , sep= "-"))