Прочитать файл, разделенный на "|" и содержащий символ "#" - PullRequest
1 голос
/ 14 января 2020

Я загружаю 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)

Но у меня есть некоторые проблемы с чтением .table функция, я думаю это из-за символов "|" а также "#". Итак, как мне прочитать файлы с этими типами символов в R?

1 Ответ

3 голосов
/ 14 января 2020

Несколько моментов:

  1. Удалите спецификацию символа комментария #, добавив comment.char="" в оператор read.table.

  2. файл имеет заголовок (используйте header = TRUE)

  3. последняя строка файла также имеет заголовок, поэтому читайте в строках и удалите его

  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" ...
...