gpt4 book ai didi

regex - 使用 tidyr::extract regex 将字符串分成几列

转载 作者:行者123 更新时间:2023-12-04 10:16:01 25 4
gpt4 key购买 nike

我正在尝试使用 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*/' ))

我想要:
  • 转到变量“int_pos”的第一个数字 ([0-9]+)
  • 由下划线 ([a-zA-Z_]+) 连接到变量“var_name”的变量名
  • 第二个数字或术语 $Char1(可能是 $Char2 等)转到 var "x"。我想 ([0-9]+|$Char[0-9]+) 可以选择这个吗?
  • 最后,“/* .../”之间的任何内容都可以转到变量“标签”(不知道此正则表达式)。
    所有其他中间字符(空格、"."、"/"、""不应考虑)

  • 这将是结果
    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

    上面的正则表达式是不完整的。另外,我不知道在提取命令语法中要明确说明哪些部分要恢复,哪些部分要省略。

    最佳答案

    这是另一种选择,尽管它使用 data.table 包而不是 tidyr:

    library(data.table)
    setDT(sasdic)

    # split label
    sasdic[, c("V1","label") := tstrsplit(a, "/\\*|\\*/")]
    # remove leading "@", split remaining parts
    sasdic[, c("int_pos","var_name","x") := tstrsplit(gsub("^@","",V1)," +")]
    # remove unneeded columns
    sasdic[, c("a","V1") := NULL]

    sasdic

    # label int_pos var_name x
    # 1: Ano do Censo 1 ANO_CENSO 5.
    # 2: Sexo 71 TP_SEXO $Char1.
    # 3: Cor/raça 72 TP_COR_RACA $Char1.
    # 4: Código País de origem 74 FK_COD_PAIS_ORIGEM 4.

    这假设“剩余部分”(标签除外)是空格分隔的。

    这也可以在一个块中完成(这就是我要做的):
    sasdic[, c("a","label","int_pos","var_name","x") := {
    x = tstrsplit(a, "/\\*|\\*/")
    x1s = tstrsplit(gsub("^@","",x[[1]])," +")
    c(list(NULL), x1s, x[2])
    }]

    关于regex - 使用 tidyr::extract regex 将字符串分成几列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34814927/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com