我将尝试使用正则表达式在R中将一个字符串向量拆分为多个变量,并且最好使用tidyr :: extract命令以dplyr-tidyr的方式。例如,在下面的向量中:
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*/' ))
我希望实现以下内容的翻译:
- 将第一个数字([0-9]+)赋值给变量“int_pos”
- 将下划线连接的变量名称([a-zA-Z_]+)赋值给变量“var_name”
- 将第二个数字或术语 $Char1(也可以是 $Char2 等)赋值给变量“x”。我想 ([0-9]+|$Char[0-9]+) 可以选择这个吗?
- 最后,将 "/* ... /" 之间的任何内容赋值给变量"label"(不知道这个的正则表达式)。所有其他中间字符(空格、"."、"/"、"")应该被忽略。
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') )
我尝试构建一个与此相关的正则表达式。目前我得到了以下内容:
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
以上正则表达式不完整。此外,我不知道如何在提取命令语法中明确指定要恢复哪些部分以及要留下哪些部分。