读取由“|”分割的文件并包含“#”字符

Read file splitted by "|" and containing "#" character

我正在下载一个 zip 文件,其中包含具有以下结构的文本文件:

ANO|MES|NUMERO_ORDEM|CODIGO_ORGAO|MATRICULA|NOME|CPF|VINCULO|CARGO|FUNCAO|REMUNERACAO_BASE|BENEFICIOS|EVENTUAIS|HORAS_EXTRAS|JUDICIAIS|COMISSAO|TETO_REDUTOR|IRRF|CONTRIBUICAO_PREVIDENCIARIA|FONTE|TOTAL|ANO_MES
2019|2|108010|12200218000179|17794|AILSON DE MELO SOUZA|###.539.0##-##|Estatutário|AGENTE ADMINISTRATIVO||2131.45|0.0|0.0|0.0|0.0|0.0|0.0|0.0|223.46|SEPLAG|1907.99|2019/02
2019|2|108011|12200218000179|17801|ANDREA ALVES COUTO VANDERLEI|###.837.7##-##|Estatutário|PROFESSOR||3661.66|0.0|0.0|0.0|0.0|0.0|0.0|105.59|402.78|SEPLAG|3153.29|2019/02
2019|2|108012|12200218000179|17805|RENATO VASCO DE ALMEIDA NETTO|###.244.8##-##|Estatutário|PROFESSOR||1830.83|0.0|0.0|0.0|0.0|0.0|0.0|0.0|201.39|SEPLAG|1629.44|2019/02

我正在使用 R:

temp = tempfile()
download.file("http://transparencia.al.gov.br/media/arquivo/folha_ativo-2019.zip",temp)
arquivo = read.table(unz(temp, "folha_ativo-2019.txt"), sep = "|")
arquivo
unlink(temp)

但是我在使用 read.table 函数时遇到了一些问题,我认为是因为字符“|”和 ”#”。那么如何在 R 中读取具有这些类型字符的文件呢?

几点:

  1. 通过将 comment.char="" 添加到 read.table 语句来删除 # 注释字符规范。

  2. 文件有一个header(使用header = TRUE

  3. 文件的最后一行也有一个 header 所以读入这些行并删除它

  4. 如果您想要字符而不是因子列,请使用 as.is=TRUE

  5. |应该没有问题

没有使用包。

L <- readLines(unz(temp, "folha_ativo-2019.txt"))
L <- head(L, -1) # remove header on the last line
arquivo <- read.table(textConnection(L), sep = "|", 
  header = TRUE, comment.char = "", as.is = TRUE)

给予:

> str(arquivo)
'data.frame':   509407 obs. of  22 variables:
 $ ANO                        : int  2019 2019 2019 2019 2019 2019 2019 2019 2019 2019 ...
 $ MES                        : int  2 2 2 2 2 2 2 2 2 2 ...
 $ NUMERO_ORDEM               : int  108010 108011 108012 108014 108016 108018 108019 108021 108022 108023 ...
 $ CODIGO_ORGAO               : num  1.22e+13 1.22e+13 1.22e+13 1.22e+13 1.22e+13 ...
 $ MATRICULA                  : int  17794 17801 17805 17811 17816 17875 17878 17888 63964 17896 ...
 $ NOME                       : chr  "AILSON DE MELO SOUZA" "ANDREA ALVES COUTO VANDERLEI" "RENATO VASCO DE ALMEIDA NETTO" "ROGERIO RODRIGUES DOS SANTOS" ...
 $ CPF                        : chr  "###.539.0##-##" "###.837.7##-##" "###.244.8##-##" "###.002.5##-##" ...
 $ VINCULO                    : chr  "Estatut<e1>rio" "Estatut<e1>rio" "Estatut<e1>rio" "Estatut<e1>rio" ...
 $ CARGO                      : chr  "AGENTE ADMINISTRATIVO" "PROFESSOR" "PROFESSOR" "PROFESSOR" ...
 $ FUNCAO                     : chr  "" "" "" "" ...
 $ REMUNERACAO_BASE           : num  2131 3662 1831 1831 1831 ...
 $ BENEFICIOS                 : num  0 0 0 0 0 0 0 0 0 0 ...
 $ EVENTUAIS                  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ HORAS_EXTRAS               : num  0 0 0 0 0 0 0 0 0 0 ...
 $ JUDICIAIS                  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ COMISSAO                   : num  0 0 0 0 0 0 0 0 0 0 ...
 $ TETO_REDUTOR               : num  0 0 0 0 0 0 0 0 0 0 ...
 $ IRRF                       : num  0 106 0 0 0 ...
 $ CONTRIBUICAO_PREVIDENCIARIA: num  223 403 201 201 201 ...
 $ FONTE                      : chr  "SEPLAG" "SEPLAG" "SEPLAG" "SEPLAG" ...
 $ TOTAL                      : num  1908 3153 1629 1629 1629 ...
 $ ANO_MES                    : chr  "2019/02" "2019/02" "2019/02" "2019/02" ...