Em qualquer projeto de análise de dados, é comum que os dados estejam dispostos em arquivos do tipo .csv
. Como inseri-los no R?1 Para isso, vamos usar um pacote específico do tidyverse
, o readr
. Embora o R base
venha com funções para isso, as do pacote readr
já retornam diretamente tibbles
, são mais rápidas e nos informam com barras de progresso quanto tempo falta para ler o objeto.2
library(tidyverse) # ou alternativamente library(readr)
As funções mais básicas:
read_csv()
lê arquivos com separação com vírgulas ,
.read_csv2()
lê arquivos separados com ;
.read_delim()
lê arquivos com qualquer tipo de separação.read_fwf()
lê arquivos com distância fixa.read_table()
faz isso com arquivos separados por espaços em braco - muito comum para bases disponibilizadas em extensão .txt
.read_log()
lê arquivos em estilo Apache de logsread_csv()
read_csv()
Abaixo, vemos um exemplo de utilizaçaõ da função read_csv()
.
heights <- read_csv("heights.csv")
read_csv()
Se você colocar o objeto heights
no Console, verá que o output dele é o de um tibble
…
heights
## # A tibble: 1,192 x 6 ## earn height sex ed age race ## <dbl> <dbl> <chr> <dbl> <dbl> <chr> ## 1 50000 74.4 male 16 45 white ## 2 60000 65.5 female 16 58 white ## 3 30000 63.6 female 16 29 white ## 4 50000 63.1 female 16 91 other ## 5 51000 63.4 female 17 39 white ## 6 9000 64.4 female 15 26 white ## 7 29000 61.7 female 12 49 white ## 8 32000 72.7 male 17 46 white ## 9 2000 72.0 male 15 21 hispanic ## 10 27000 72.2 male 12 26 white ## # … with 1,182 more rows
read_csv()
Lembre-se que você sempre poderá utilizar ?read_csv
para consultar os argumentos da função - ou de qualquer função, diga-se, do R! Vamos usar abaixo alguns dos mais comuns.
mtcars <- read_csv(readr_example("mtcars.csv"), col_types = cols( mpg = col_double(), cyl = col_integer(), disp = col_double(), hp = col_integer(), drat = col_double(), vs = col_integer(), wt = col_double(), qsec = col_double(), am = col_integer(), gear = col_integer(), carb = col_integer() ) )
read_csv()
sidra = read_csv2('sidra.csv', skip=5, col_names = c('mes', 'vendas', 'vendas_sa', 'receita', 'receita_sa'), col_types = cols( mes = col_date(format='%d/%m/%Y'), vendas = col_double(), vendas_sa = col_double(), receita = col_double(), receita_sa = col_double()))
Agora que conseguimos importar nossos primeiros arquivos para o R, vamos ver um pouco sobre como o R analisa um vetor que contém um character e retorna um vetor mais especializado, como logical, integer ou date. Faremos isso através das funções parse_*()
.
str(parse_logical(c('TRUE', 'FALSE', 'NA')))
## logi [1:3] TRUE FALSE NA
str(parse_date(c('2010-01-01', '1979-10-14')))
## Date[1:2], format: "2010-01-01" "1979-10-14"
parse_integer(c('1', '231', '.', '456'), na='.')
## [1] 1 231 NA 456
Usar as funções parse_*()
é uma maneira de entender como o pacote readr
lida com diferentes imputs na hora da importação de dados. Veremos cada um dos casos.
Há alguns problemas ao analisar um vetor que contém números. Dentre os mais comuns:
,
ao invés de .
. De forma a ter maior controle, às vezes é preciso especificar isso ao ler um vetor.parse_double('1.23')
## [1] 1.23
parse_double('1,23', locale = locale(decimal_mark = ','))
## [1] 1.23
$
ou %
.parse_number('$100')
## [1] 100
parse_number('20%')
## [1] 20
Às vezes, números contém grupos de caracteres, de modo a tornar mais fácil de lê-los.
parse_number('1.200,86', locale = locale(decimal_mark = ',', grouping_mark = '.'))
## [1] 1200.86
Vamos agora ver como analisar vetores que contenham caracteres ou strings. Para isso, podemos utilizar a função parse_character
. O problema com strings é que existem várias formas de representá-los. Para entender melhor, vamos começar com o exemplo abaixo.
charToRaw('Seção')
## [1] 53 65 c3 a7 c3 a3 6f
Cada número hexadecimal representa um byte de informação: 53 é o S. A relação entre o número hexadecimal e o caractere é chamado de encoding
. O problema é quando o idioma não é o inglês, como no nosso caso. O pacote readr
irá sempre assumir como default que o arquivo está com encoding UTF-8 e acabará lendo o vetor que contenha caracteres especiais de forma errada. Para resolver isso, podemos fazer como no código abaixo.
parse_character('Seção', locale = locale(encoding = 'Latin1'))
## [1] "Seção"
subitem = read.csv2("subitem.csv") subitem
## subitem variacao peso ## 1 1101002.Arroz -0.41 0.5808 ## 2 1101051.Feij\xe3o - mulatinho 17.05 0.0262 ## 3 1101052.Feij\xe3o - preto 12.55 0.0824 ## 4 1101053.Feij\xe3o - macassar (fradinho) 9.45 0.0301 ## 5 1101073.Feij\xe3o - carioca (rajado) 12.93 0.2796 ## 6 1101075.Feij\xe3o - branco 29.25 0.0020 ## 7 1102001.Farinha de arroz -4.73 0.0131 ## 8 1102006.Macarr\xe3o 1.13 0.2831 ## 9 1102008.Fub\xe1 de milho 1.02 0.0280 ## 10 1102009.Amido de milho 0.06 0.0043 ## 11 1102010.Flocos de milho 1.40 0.0060 ## 12 1102012.Farinha de trigo 0.70 0.0796 ## 13 1102013.Farinha vitaminada 3.30 0.0083 ## 14 1102023.Farinha de mandioca 2.57 0.1457 ## 15 1102029.Massa semipreparada 0.89 0.0938 ## 16 1103003.Batata-inglesa 21.11 0.2661 ## 17 1103004.Inhame 3.81 0.0089 ## 18 1103005.Mandioca (aipim) -1.34 0.0107 ## 19 1103017.Ab\xf3bora -1.01 0.0127 ## 20 1103026.Piment\xe3o 12.97 0.0061 ## 21 1103027.Quiabo -8.29 0.0034 ## 22 1103028.Tomate 31.84 0.2356 ## 23 1103043.Cebola 5.38 0.1477 ## 24 1103044.Cenoura 4.07 0.0620 ## 25 1103046.Mandioquinha (batata-baroa) 4.68 0.0101 ## 26 1104003.A\xe7\xfacar refinado -1.18 0.1043 ## 27 1104004.A\xe7\xfacar cristal -1.00 0.2672 ## 28 1104018.Balas 0.94 0.0169 ## 29 1104023.Chocolate em barra e bombom -3.59 0.1264 ## 30 1104032.Sorvete 0.51 0.1151 ## 31 1104052.Chocolate e achocolatado em p\xf3 -0.21 0.1513 ## 32 1104060.Doce de frutas em pasta -0.03 0.0044 ## 33 1105001.Alface 4.77 0.1242 ## 34 1105004.Coentro 0.34 0.0111 ## 35 1105005.Couve 2.84 0.0204 ## 36 1105006.Couve-flor 6.11 0.0051 ## 37 1105010.Repolho 15.36 0.0352 ## 38 1105012.Cheiro-verde 5.02 0.0428 ## 39 1105013.Agri\xe3o 4.05 0.0002 ## 40 1105019.Br\xf3colis 6.74 0.0178 ## 41 1106001.Banana-da-terra -1.50 0.0120 ## 42 1106003.Abacaxi -11.02 0.0353 ## 43 1106004.Abacate -11.58 0.0013 ## 44 1106005.Banana - d'agua 13.13 0.0885 ## 45 1106006.Banana - ma\xe7\xe3 -2.67 0.0044 ## 46 1106008.Banana - prata 4.86 0.1820 ## 47 1106011.Laranja - ba\xeda -1.19 0.0101 ## 48 1106015.Lim\xe3o -7.52 0.0018 ## 49 1106017.Ma\xe7\xe3 -6.29 0.1587 ## 50 1106018.Mam\xe3o 18.52 0.0973 ## 51 1106019.Manga 21.21 0.0123 ## 52 1106020.Maracuj\xe1 16.70 0.0054 ## 53 1106021.Melancia -0.59 0.0621 ## 54 1106023.Pera -4.71 0.0229 ## 55 1106027.Tangerina 7.02 0.1242 ## 56 1106028.Uva -2.17 0.0836 ## 57 1106039.Laranja - pera 7.57 0.1708 ## 58 1106051.Morango 5.31 0.0110 ## 59 1106084.Goiaba -5.90 0.0024 ## 60 1107009.F\xedgado -0.55 0.0258 ## 61 1107018.Carne de porco 0.56 0.2049 ## 62 1107031.Carne de carneiro 0.18 0.0075 ## 63 1107084.Contrafil\xe9 -1.23 0.3559 ## 64 1107085.Fil\xe9-mignon 1.83 0.0518 ## 65 1107087.Ch\xe3 de dentro 0.48 0.2705 ## 66 1107088.Alcatra -0.17 0.4248 ## 67 1107089.Patinho 0.55 0.1926 ## 68 1107090.Lagarto redondo 0.30 0.0148 ## 69 1107091.Lagarto comum 2.00 0.0604 ## 70 1107093.M\xfasculo 1.88 0.1513 ## 71 1107094.P\xe1 0.19 0.1257 ## 72 1107095.Ac\xe9m 1.18 0.2837 ## 73 1107096.Peito -0.71 0.0337 ## 74 1107097.Capa de fil\xe9 -2.67 0.0050 ## 75 1107099.Costela 2.41 0.4097 ## 76 1108002.Peixe - anchova 7.43 0.0035 ## 77 1108003.Peixe - badejo 2.42 0.0009 ## 78 1108004.Peixe - corvina -0.17 0.0260 ## 79 1108005.Peixe - cavalinha -2.59 0.0022 ## 80 1108006.Peixe -2.29 0.0506 ## 81 1108009.Peixe - pescadinha 1.13 0.0016 ## 82 1108011.Peixe - tainha 4.19 0.0006 ## 83 1108012.Peixe - sardinha -3.20 0.0164 ## 84 1108013.Camar\xe3o 0.34 0.0528 ## 85 1108015.Peixe - vermelho -4.99 0.0027 ## 86 1108019.Peixe - cavala 2.60 0.0050 ## 87 1108024.Peixe - pacu -1.24 0.0005 ## 88 1108028.Peixe - dourado 2.38 0.0007 ## 89 1108029.Peixe - ca\xe7\xe3o 1.10 0.0081 ## 90 1108031.Peixe - merluza -0.09 0.0261 ## 91 1108032.Peixe - serra 4.59 0.0068 ## 92 1108038.Peixe - pescada 3.07 0.0743 ## 93 1108045.Caranguejo 3.44 0.0058 ## 94 1108049.Peixe - castanha 6.35 0.0009 ## 95 1108054.Peixe - piau 0.42 0.0006 ## 96 1108057.Peixe - surubim 0.42 0.0004 ## 97 1108067.Sururu 7.66 0.0003 ## 98 1108072.Peixe - curimat\xe3 9.74 0.0038 ## 99 1108075.Peixe - salm\xe3o 0.73 0.0074 ## 100 1108080.Peixe - til\xe1pia 3.49 0.0139 ## 101 1108083.Peixe - tucunar\xe9 3.50 0.0042 ## 102 1108087.Peixe - tambaqui -3.01 0.0085 ## 103 1108088.Peixe - dourada 0.03 0.0182 ## 104 1108096.Peixe - pero\xe1 4.69 0.0006 ## 105 1108112.Peixe - pintado 0.81 0.0004 ## 106 1108170.Peixe - mandi 0.42 0.0005 ## 107 1109002.Presunto 1.99 0.1113 ## 108 1109007.Salsicha 1.15 0.1120 ## 109 1109008.Lingui\xe7a 1.74 0.2856 ## 110 1109010.Mortadela 1.00 0.0915 ## 111 1109012.Salame -0.96 0.0073 ## 112 1109056.Carne-seca e de sol 0.09 0.1227 ## 113 1109058.Carne de porco salgada e defumada -1.19 0.0126 ## 114 1109088.Hamb\xfarger -0.24 0.0020 ## 115 1110009.Frango inteiro 1.66 0.4419 ## 116 1110010.Frango em peda\xe7os 1.35 0.3693 ## 117 1110044.Ovo de galinha 5.12 0.2138 ## 118 1111004.Leite longa vida 0.52 0.9238 ## 119 1111008.Leite condensado -0.48 0.0170 ## 120 1111009.Leite em p\xf3 -0.26 0.2325 ## 121 1111011.Queijo 0.91 0.5100 ## 122 1111012.Creme de leite -1.98 0.0026 ## 123 1111019.Iogurte e bebidas l\xe1cteas 0.30 0.2299 ## 124 1111031.Manteiga 0.50 0.0309 ## 125 1112003.Biscoito 0.14 0.4491 ## 126 1112015.P\xe3o franc\xeas 0.48 1.1236 ## 127 1112017.P\xe3o doce -0.07 0.1029 ## 128 1112018.P\xe3o de forma 0.85 0.1206 ## 129 1112019.Bolo 1.00 0.1102 ## 130 1112025.P\xe3o de queijo 0.72 0.0213 ## 131 1113013.\xd3leo de soja 1.09 0.2505 ## 132 1113014.Azeite de oliva -1.42 0.0273 ## 133 1113040.Margarina 0.12 0.1515 ## 134 1114001.Suco de frutas 0.08 0.1554 ## 135 1114004.A\xe7a\xed (emuls\xe3o) 10.02 0.0373 ## 136 1114022.Caf\xe9 mo\xeddo -0.69 0.3546 ## 137 1114023.Caf\xe9 sol\xfavel 0.11 0.0157 ## 138 1114029.Ch\xe1 0.62 0.0413 ## 139 1114083.Refrigerante e \xe1gua mineral -0.37 0.7492 ## 140 1114084.Cerveja -0.34 0.3868 ## 141 1114085.Outras bebidas alco\xf3licas -0.29 0.1159 ## 142 1115004.Coco ralado 0.50 0.0071 ## 143 1115006.Ervilha em conserva -0.93 0.0055 ## 144 1115016.Palmito em conserva 1.30 0.0137 ## 145 1115017.Pepino em conserva 0.60 0.0047 ## 146 1115039.Sardinha em conserva 0.16 0.0435 ## 147 1115050.Salsicha em conserva 0.36 0.0040 ## 148 1115051.Carne em conserva 0.31 0.0061 ## 149 1115053.Pat\xea 0.11 0.0035 ## 150 1115056.Sopa desidratada -0.22 0.0112 ## 151 1115057.Azeitona 0.34 0.0272 ## 152 1115058.Milho-verde em conserva -0.02 0.0171 ## 153 1115075.Atum em conserva -0.19 0.0179 ## 154 1116001.Leite de coco 0.65 0.0042 ## 155 1116005.Atomatado -0.19 0.1518 ## 156 1116010.Alho 6.15 0.0871 ## 157 1116013.Sal -0.59 0.0097 ## 158 1116026.Fermento 0.26 0.0080 ## 159 1116033.Maionese -0.63 0.0460 ## 160 1116041.Vinagre 1.49 0.0064 ## 161 1116048.Caldo concentrado -0.41 0.0266 ## 162 1116071.Tempero misto 1.03 0.0649 ## 163 1201001.Refei\xe7\xe3o -0.25 5.0844 ## 164 1201003.Lanche 1.02 2.1188 ## 165 1201005.Caf\xe9 da manh\xe3 0.45 0.1096 ## 166 1201007.Refrigerante e \xe1gua mineral -0.31 0.3892 ## 167 1201009.Cafezinho 0.79 0.0855 ## 168 1201048.Cerveja -0.36 0.7172 ## 169 1201051.Outras bebidas alco\xf3licas 0.94 0.0630 ## 170 1201061.Doces 0.59 0.2736 ## 171 2101001.Aluguel residencial 0.29 3.8108 ## 172 2101002.Condom\xednio 0.09 1.7068 ## 173 2101004.Taxa de \xe1gua e esgoto 0.46 1.7541 ## 174 2101012.Mudan\xe7a 0.89 0.0184 ## 175 2103005.Ferragens 1.13 0.0480 ## 176 2103008.Material de eletricidade -0.64 0.0213 ## 177 2103009.Material de pintura -0.24 0.0298 ## 178 2103012.Vidro -1.17 0.0204 ## 179 2103014.Tinta 0.52 0.2422 ## 180 2103032.Revestimento de piso e parede 1.90 0.1457 ## 181 2103039.Cimento -0.98 0.1432 ## 182 2103040.Tijolo -0.50 0.1125 ## 183 2103041.Material hidr\xe1ulico -0.30 0.0543 ## 184 2103042.M\xe3o-de-obra 0.12 1.4837 ## 185 2103048.Areia 0.06 0.0464 ## 186 2103055.Telha 0.01 0.0692 ## 187 2104005.\xc1gua sanit\xe1ria 0.65 0.0577 ## 188 2104008.Detergente -0.38 0.1250 ## 189 2104009.Sab\xe3o em p\xf3 1.25 0.3389 ## 190 2104012.Desinfetante -0.17 0.0488 ## 191 2104013.Inseticida -0.88 0.0052 ## 192 2104015.Sab\xe3o em barra 0.44 0.0979 ## 193 2104016.Esponja de limpeza 0.07 0.0439 ## 194 2104032.Amaciante 1.05 0.1443 ## 195 2201003.Carv\xe3o vegetal -0.52 0.0076 ## 196 2201004.G\xe1s de botij\xe3o 0.58 1.3248 ## 197 2201005.G\xe1s encanado -0.79 0.0839 ## 198 2202003.Energia el\xe9trica residencial 0.04 3.8288 ## 199 3101002.M\xf3vel para sala 0.43 0.4977 ## 200 3101003.M\xf3vel para quarto 0.27 0.4379 ## 201 3101015.M\xf3vel para copa e cozinha -1.25 0.1661 ## 202 3101016.M\xf3vel infantil -0.10 0.0100 ## 203 3101017.Colch\xe3o -0.08 0.1163 ## 204 3102005.Tapete 0.24 0.0876 ## 205 3102006.Cortina -0.12 0.0893 ## 206 3102007.Utens\xedlios de metal 0.73 0.0950 ## 207 3102009.Utens\xedlios de vidro e lou\xe7a 0.03 0.0539 ## 208 3102010.Utens\xedlios de pl\xe1stico 1.78 0.0411 ## 209 3102035.Flores naturais -0.09 0.0225 ## 210 3102040.Utens\xedlios diversos 0.62 0.1595 ## 211 3103001.Roupa de cama 0.81 0.2238 ## 212 3103003.Roupa de banho 0.67 0.0783 ## 213 3201001.Refrigerador 1.06 0.4498 ## 214 3201002.Ar-condicionado -0.62 0.0371 ## 215 3201006.M\xe1quina de lavar roupa 0.02 0.1959 ## 216 3201012.Liquidificador 1.91 0.0029 ## 217 3201013.Ventilador 0.79 0.0238 ## 218 3201021.Fog\xe3o -1.46 0.1824 ## 219 3201050.Chuveiro el\xe9trico 0.31 0.0212 ## 220 3201065.Forno de micro-ondas 0.53 0.0497 ## 221 3202001.Televisor -1.65 0.1569 ## 222 3202003.Aparelho de som -0.37 0.0625 ## 223 3202005.Aparelho de DVD 0.42 0.0581 ## 224 3202013.Antena 0.14 0.0057 ## 225 3202028.Microcomputador 0.50 0.2858 ## 226 3301002.Conserto de refrigerador -0.32 0.0829 ## 227 3301006.Conserto de televisor -0.14 0.0704 ## 228 3301009.Conserto de aparelho de som 0.42 0.0057 ## 229 3301015.Conserto de m\xe1quina de lavar roupa 2.12 0.0667 ## 230 3301022.Reforma de estofado 1.86 0.1314 ## 231 3301044.Manuten\xe7\xe3o de microcomputador -1.28 0.0022 ## 232 4101002.Cal\xe7a comprida masculina -0.13 0.4279 ## 233 4101004.Terno 0.62 0.0613 ## 234 4101005.Agasalho masculino 3.52 0.0638 ## 235 4101006.Short e bermuda masculina 0.64 0.2015 ## 236 4101008.Cueca -0.19 0.0210 ## 237 4101009.Camisa / camiseta masculina 1.00 0.5865 ## 238 4102002.Cal\xe7a comprida feminina 0.18 0.4453 ## 239 4102003.Agasalho feminino 3.16 0.0499 ## 240 4102004.Saia 0.61 0.0218 ## 241 4102005.Vestido -1.22 0.2789 ## 242 4102008.Blusa 1.45 0.5616 ## 243 4102010.Lingerie -0.46 0.1584 ## 244 4102013.Bermuda e short feminino -1.40 0.0797 ## 245 4103001.Uniforme escolar 0.58 0.0255 ## 246 4103002.Cal\xe7a comprida infantil 0.27 0.1190 ## 247 4103005.Agasalho infantil 1.08 0.0375 ## 248 4103007.Vestido infantil 0.30 0.0658 ## 249 4103008.Bermuda e short infantil -0.16 0.1010 ## 250 4103011.Camisa / camiseta infantil 0.62 0.2446 ## 251 4103031.Conjunto infantil 0.36 0.0425 ## 252 4201002.Sapato masculino 0.45 0.1858 ## 253 4201003.Sapato feminino -0.19 0.2835 ## 254 4201004.Sapato infantil 1.24 0.0113 ## 255 4201006.Sand\xe1lia / chinelo masculino -0.35 0.0206 ## 256 4201007.Sand\xe1lia / chinelo feminino -0.86 0.3461 ## 257 4201008.Sand\xe1lia / chinelo infantil -0.30 0.0305 ## 258 4201015.Bolsa 0.71 0.1778 ## 259 4201063.T\xeanis 1.31 0.5878 ## 260 4301001.Bijuteria 0.60 0.1427 ## 261 4301002.Joia 0.52 0.1847 ## 262 4301004.Rel\xf3gio de pulso 0.16 0.0160 ## 263 4401001.Tecido 0.76 0.0521 ## 264 4401002.Artigos de armarinho -0.51 0.0189 ## 265 4401005.Acortinado (mosquiteiro) -0.50 0.0128 ## 266 5101001.\xd4nibus urbano 0.90 2.7967 ## 267 5101002.T\xe1xi 0.00 0.3510 ## 268 5101004.Trem 2.07 0.0626 ## 269 5101006.\xd4nibus intermunicipal 0.04 0.7714 ## 270 5101007.\xd4nibus interestadual -0.14 0.2560 ## 271 5101010.Passagem a\xe9rea 7.29 0.4231 ## 272 5101011.Metr\xf4 0.00 0.0680 ## 273 5101022.Transporte hidrovi\xe1rio 0.00 0.0059 ## 274 5101026.Transporte escolar 1.29 0.0931 ## 275 5102001.Autom\xf3vel novo -0.09 2.6249 ## 276 5102004.Emplacamento e licen\xe7a 0.37 0.9053 ## 277 5102005.Seguro volunt\xe1rio de ve\xedculo 0.65 0.2417 ## 278 5102006.Multa 0.00 0.0459 ## 279 5102007.\xd3leo lubrificante 0.62 0.0946 ## 280 5102009.Acess\xf3rios e pe\xe7as 0.73 0.3226 ## 281 5102010.Pneu 0.18 0.1771 ## 282 5102011.Conserto de autom\xf3vel 0.28 1.7264 ## 283 5102013.Estacionamento -0.21 0.0950 ## 284 5102015.Ped\xe1gio 0.12 0.1101 ## 285 5102019.Lubrifica\xe7\xe3o e lavagem -0.60 0.0394 ## 286 5102020.Autom\xf3vel usado 0.01 0.8958 ## 287 5102037.Pintura de ve\xedculo 2.45 0.0459 ## 288 5102051.Aluguel de ve\xedculo -5.61 0.0053 ## 289 5102053.Motocicleta 0.44 0.5968 ## 290 5104001.Gasolina 2.88 4.2120 ## 291 5104002.Etanol 7.02 0.9200 ## 292 5104003.\xd3leo diesel 1.44 0.1527 ## 293 5104005.G\xe1s veicular 0.58 0.1383 ## 294 6101001.Anti-infeccioso e antibi\xf3tico -0.53 0.2287 ## 295 6101002.Analg\xe9sico e antit\xe9rmico 0.17 0.4318 ## 296 6101003.Anti-inflamat\xf3rio e antirreum\xe1tico -0.26 0.3105 ## 297 6101004.Antigripal e antituss\xedgeno -0.16 0.1850 ## 298 6101006.Dermatol\xf3gico -0.13 0.1047 ## 299 6101007.Antial\xe9rgico e broncodilatador 0.24 0.1821 ## 300 6101009.Gastroprotetor 0.04 0.2128 ## 301 6101010.Vitamina e fortificante 0.67 0.1964 ## 302 6101011.Horm\xf4nio -0.64 0.3705 ## 303 6101013.Psicotr\xf3pico e anorex\xedgeno -0.88 0.4050 ## 304 6101014.Hipotensor e hipocolesterol\xeamico 0.14 0.6610 ## 305 6101051.Oftalmol\xf3gico 0.39 0.0743 ## 306 6102002.Arma\xe7\xe3o de \xf3culos 1.57 0.0361 ## 307 6102003.\xd3culos sem grau 0.97 0.0736 ## 308 6102011.Lentes de \xf3culos e de contato 0.42 0.1296 ## 309 6201002.M\xe9dico 0.18 0.4766 ## 310 6201003.Dentista 0.34 0.4883 ## 311 6201005.Aparelho ortod\xf4ntico 1.58 0.0623 ## 312 6201006.Artigos ortop\xe9dicos -0.02 0.0035 ## 313 6201007.Fisioterapeuta 2.49 0.0572 ## 314 6201010.Psic\xf3logo -0.25 0.0797 ## 315 6202003.Exame de laborat\xf3rio -0.12 0.0993 ## 316 6202004.Hospitaliza\xe7\xe3o e cirurgia 1.87 0.4008 ## 317 6202006.Exame de imagem 1.24 0.0995 ## 318 6203001.Plano de sa\xfade 0.80 4.1966 ## 319 6301001.Produto para cabelo 0.73 0.3092 ## 320 6301002.Fralda descart\xe1vel 0.67 0.0583 ## 321 6301004.Produto para barba 1.31 0.0139 ## 322 6301006.Produto para pele -3.72 0.3254 ## 323 6301007.Produto para higiene bucal 0.38 0.2020 ## 324 6301010.Produto para unha -0.66 0.0961 ## 325 6301011.Perfume 1.45 0.8831 ## 326 6301014.Desodorante 0.79 0.1031 ## 327 6301015.Absorvente higi\xeanico 0.47 0.0104 ## 328 6301016.Sabonete 1.33 0.1710 ## 329 6301017.Papel higi\xeanico -0.22 0.2070 ## 330 6301020.Artigos de maquiagem 0.22 0.1209 ## 331 7101001.Costureira 0.48 0.0487 ## 332 7101005.Manicure -0.71 0.4430 ## 333 7101009.Cabeleireiro -0.22 1.2646 ## 334 7101010.Empregado dom\xe9stico 0.36 4.3219 ## 335 7101014.Depila\xe7\xe3o 1.20 0.0151 ## 336 7101036.Despachante 0.98 0.0853 ## 337 7101076.Servi\xe7o banc\xe1rio 0.00 0.6741 ## 338 7101090.Conselho de classe 0.27 0.0138 ## 339 7201001.Cinema 0.10 0.1982 ## 340 7201002.CD e DVD 0.93 0.0409 ## 341 7201003.Ingresso para jogo 0.68 0.0080 ## 342 7201006.Clube 0.53 0.1713 ## 343 7201010.Instrumento musical 1.07 0.0385 ## 344 7201018.Tratamento de animais 0.03 0.2254 ## 345 7201019.Bicicleta -0.85 0.0894 ## 346 7201020.Alimento para animais -0.58 0.2688 ## 347 7201023.Brinquedo -0.74 0.4104 ## 348 7201052.Loca\xe7\xe3o de DVD 0.34 0.1117 ## 349 7201054.Boate e danceteria 0.44 0.2344 ## 350 7201063.Jogos de azar 0.00 0.4371 ## 351 7201068.Motel 1.45 0.0055 ## 352 7201090.Hotel 1.81 0.3051 ## 353 7201095.Excurs\xe3o 1.48 0.3520 ## 354 7202041.Cigarro -0.34 1.0597 ## 355 7203001.M\xe1quina fotogr\xe1fica 1.34 0.0469 ## 356 7203003.Revela\xe7\xe3o e c\xf3pia 0.48 0.0280 ## 357 8101001.Creche 1.04 0.0199 ## 358 8101002.Educa\xe7\xe3o infantil 0.62 0.2331 ## 359 8101003.Ensino fundamental 0.28 0.8896 ## 360 8101004.Ensino m\xe9dio -0.04 0.4207 ## 361 8101005.Ensino superior 0.43 1.5488 ## 362 8101006.P\xf3s-gradua\xe7\xe3o 0.20 0.2084 ## 363 8102001.Jornal di\xe1rio 0.00 0.1515 ## 364 8102002.Assinatura de jornal 0.20 0.0409 ## 365 8102004.Revista 0.00 0.2310 ## 366 8102005.Livro 0.56 0.1399 ## 367 8103001.Caderno 1.05 0.1335 ## 368 8103002.Fotoc\xf3pia -0.91 0.0263 ## 369 8103014.Artigos de papelaria 0.25 0.1944 ## 370 8104001.Curso preparat\xf3rio 0.10 0.1782 ## 371 8104002.Curso t\xe9cnico 0.02 0.0784 ## 372 8104003.Curso de idioma 0.18 0.2751 ## 373 8104004.Curso de inform\xe1tica 0.64 0.0996 ## 374 8104005.Autoescola 0.00 0.0004 ## 375 8104006.Atiividades f\xedsicas 0.68 0.1970 ## 376 9101001.Correio 2.23 0.0130 ## 377 9101002.Telefone fixo -0.75 0.8422 ## 378 9101003.Telefone p\xfablico 0.00 0.0959 ## 379 9101008.Telefone celular 0.00 1.2531 ## 380 9101018.Acesso \xe0 internet 0.00 0.2206 ## 381 9101019.Aparelho telef\xf4nico -1.44 0.1240 ## 382 9101021.Telefone com internet - pacote 0.00 0.6645 ## 383 9101022.TV por assinatura com internet 0.00 0.2753
subitem = read_csv2('subitem.csv', locale = locale(encoding='Latin1')) subitem
## # A tibble: 383 x 3 ## subitem variacao peso ## <chr> <dbl> <dbl> ## 1 1101002.Arroz -0.41 0.581 ## 2 1101051.Feijão - mulatinho 17.0 0.0262 ## 3 1101052.Feijão - preto 12.6 0.0824 ## 4 1101053.Feijão - macassar (fradinho) 9.45 0.0301 ## 5 1101073.Feijão - carioca (rajado) 12.9 0.280 ## 6 1101075.Feijão - branco 29.2 0.002 ## 7 1102001.Farinha de arroz -4.73 0.0131 ## 8 1102006.Macarrão 1.13 0.283 ## 9 1102008.Fubá de milho 1.02 0.028 ## 10 1102009.Amido de milho 0.06 0.0043 ## # … with 373 more rows
fruta = c('maracujá', 'limão', 'laranja', 'pêra') parse_factor(fruta, levels=NULL, locale = locale(encoding='Latin1'))
## [1] maracujá limão laranja pêra ## Levels: maracujá limão laranja pêra
parse_datetime("2010-10-01T2010")
## [1] "2010-10-01 20:10:00 UTC"
parse_datetime("20101010")
## [1] "2010-10-10 UTC"
parse_date("2010-10-01")
## [1] "2010-10-01"
library(hms) parse_time("01:10 am")
## 01:10:00
parse_time("20:10:01")
## 20:10:01
Você pode ainda especificar um formato próprio com o argumento format
:
%Y
(4 dígitos) ou %y
(2 dígitos)%m
(2 dígitos) ou %b
(Jan) ou %B
(Janeiro)%d
(2 dígitos) ou %e
(espaço)Tempo:
parse_date("01/02/15", "%m/%d/%y")
## [1] "2015-01-02"
parse_date("01/02/15", "%d/%m/%y")
## [1] "2015-02-01"
parse_date("01/02/15", "%y/%m/%d")
## [1] "2001-02-15"
parse_date("01/01/2000", "%d/%m/%Y")
## [1] "2000-01-01"
readr
usa uma heurística para descobrir o tipo de cada coluna: lê as primeiras 1000 linhas e usa algumas heurísticas (moderadamente conservadoras) para descobrir o tipo de cada coluna. Você pode emular esse processo com um vetor de caracteres usando guess_parser()
, que retorna a melhor estimativa de readr
e parse_guess()
, que usa essa suposição para analisar a coluna:
guess_parser("2010-10-01")
## [1] "date"
guess_parser("15:01")
## [1] "time"
guess_parser(c("TRUE", "FALSE"))
## [1] "logical"
guess_parser(c("1", "5", "9"))
## [1] "double"
guess_parser(c("12,352,561"))
## [1] "number"
str(parse_guess("2010-10-10"))
## Date[1:1], format: "2010-10-10"
A heurística tenta cada um dos seguintes tipos, parando quando encontra uma correspondência:
Esses padrões nem sempre funcionam para arquivos maiores. Existem dois problemas básicos:
As primeiras mil linhas podem ser um caso especial, e o readr adivinha um tipo que não é suficientemente geral. Por exemplo, você pode ter uma coluna de duplas que contenha apenas inteiros nas primeiras 1000 linhas.
A coluna pode conter muitos valores ausentes. Se as primeiras 1000 linhas contiverem apenas NAs
, o readr irá adivinhar que é um vetor de caracteres, enquanto você provavelmente desejará analisá-lo como algo mais específico.
challenge <- read_csv(readr_example("challenge.csv"))
problems(challenge)
## # A tibble: 1,000 x 5 ## row col expected actual file ## <int> <chr> <chr> <chr> <chr> ## 1 1001 y 1/0/T/F/TRUE/… 2015-01… '/Library/Frameworks/R.framework/Version… ## 2 1002 y 1/0/T/F/TRUE/… 2018-05… '/Library/Frameworks/R.framework/Version… ## 3 1003 y 1/0/T/F/TRUE/… 2015-09… '/Library/Frameworks/R.framework/Version… ## 4 1004 y 1/0/T/F/TRUE/… 2012-11… '/Library/Frameworks/R.framework/Version… ## 5 1005 y 1/0/T/F/TRUE/… 2020-01… '/Library/Frameworks/R.framework/Version… ## 6 1006 y 1/0/T/F/TRUE/… 2016-04… '/Library/Frameworks/R.framework/Version… ## 7 1007 y 1/0/T/F/TRUE/… 2011-05… '/Library/Frameworks/R.framework/Version… ## 8 1008 y 1/0/T/F/TRUE/… 2020-07… '/Library/Frameworks/R.framework/Version… ## 9 1009 y 1/0/T/F/TRUE/… 2011-04… '/Library/Frameworks/R.framework/Version… ## 10 1010 y 1/0/T/F/TRUE/… 2010-05… '/Library/Frameworks/R.framework/Version… ## # … with 990 more rows
De forma a resolver esse problema, podemos proceder da forma anterior:
challenge <- read_csv( readr_example("challenge.csv"), col_types = cols( x = col_double(), y = col_date() ) )
Por fim, é possível escrever arquivos .csv
com a função write_csv
.
write_csv(challenge, "challenge.csv")
Grolemund, G., and H. Wickham. 2017. R for Data Science. O’Reilly Media.