Po përpiqem të ndaj një vektor vargu në disa variabla duke përdorur shprehje të rregullta në R, mundësisht në një mënyrë dplyr-tidyr duke përdorur komandën tidyr::extract. Për shembull në vektorin e mëposhtëm:
sasdic <- data.frame(a=c(
'@1 ANO_CENSO 5. /*Ano do Censo*/',
'@71 TP_SEXO $Char1. /*Sexo*/',
'@72 TP_COR_RACA $Char1. /*Cor/raça*/',
'@74 FK_COD_PAIS_ORIGEM 4. /*Código País de origem*/' ))
Unë do të doja për:
- numri i parë ([0-9]+) për të shkuar te ndryshorja "int_pos"
- emri i variablës i lidhur me nënvizim ([a-zA-Z_]+) për të shkuar te ndryshorja "var_name"
- Numri i dytë ose termi $Char1 (mund të jetë $Char2, etj) për të shkuar në var "x". Kuptova ([0-9]+|$Char[0-9]+) a mund ta zgjidhte këtë?
- Së fundi, çdo gjë që vjen në mes "/* ... /" për të shkuar te ndryshorja "label" (nuk e di regex për këtë). Të gjithë karakteret e tjera të ndërmjetme (hapësirat bosh, ".", "/", "" duhet të hiqen në konsideratë)
Ky do të ishte rezultati
d <- data.frame(int_pos=c(1,72,72,74),
var_name=c('ANO_CENSO','TP_SEXO','TP_COR_RACA','FK_COD_PAIS_ORIGEM'),
x=c('5','Chart1','$Char1','4'),
label=c('Ano do Censo','Sexo','Cor/raça','Código País de origem') )
Unë u përpoqa të ndërtoj një shprehje të rregullt për këtë. Kjo është ajo që kam marrë deri tani:
sasdic %>% extract(a, c('int_pos','var_name','x','label'),
"([0-9]+)([a-zA-Z_]+)([0-9]+|$Char[0-9]+)(something to get the label")
-> d
sipër shprehja e rregullt është e paplotë. Gjithashtu, nuk e di hot për të bërë të qartë në sintaksën e komandës ekstrakte, cilat janë pjesët që duhen rikuperuar dhe cilat janë pjesët për të lënë jashtë.