Sto cercando di suddividere un vettore stringa in più variabili utilizzando le espressioni regolari in R, preferibilmente in un modo dplyr-tidyr usando il comando tidyr :: extract. Per insctance nel vettore sotto:Interrompi la stringa in più colonne usando tidyr :: extract regex
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*/'))
vorrei per il:
- primo numero ([0-9] +) per andare a "int_pos" variabili
- il nome della variabile in contatto sottolineando ([a-zA-Z _] +) per passare alla variabile "var_name"
- Il secondo numero o il termine $ Char1 (potrebbe essere $ Char2, ecc.) per passare a var "x". Ho pensato ([0-9] + | $ Char [0-9] +) potrebbe selezionare questo?
- Infine, qualunque cosa si trovi tra "/ * ... /" per andare alla variabile "etichetta" (non si conosce la regex per questo). Tutte le altre lettere accentate intermidiate (spazi vuoti, " " "/","" dovrebbe essere disconsidered)
Questo sarebbe il risultato
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'))
Ho provato a costruire un'espressione regolare per Questo. Questo è quello che ho ottenuto finora:
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
sopra l'espressione regolare è incompleta. Inoltre, non so come rendere esplicito nella sintassi del comando extract, quali sono le parti da recuperare e quali sono le parti da tralasciare.