title | author | date | output | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Entrada e saída de dados |
Jônatan Tatsch |
07-05-2018 |
|
O R permite ler dados de uma variedade de fontes e formatos. Nesta unidade veremos como importar dados de arquivos texto, binários e de outros softwares para o R. Nesta seção vamos:
- ver como importar dados no R1
- conhecer os formatos mais comuns de dados reconhecidos pelo R
- ler arquivos de dados meteorológicos de fontes brasileiras
Até agora nós trabalhamos com dados que criados a partir de comandos diretamente digitados no console do R. Para criação de vetores usamos a função c
que combina valores em um vetor.
# Exemplo: vetor
v1 <- c(1,3,4:8,10)
v1
#> [1] 1 3 4 5 6 7 8 10
Nós podemos informar os números de um vetor a partir do teclado, um de cada vez usando e quando terminar teclar enter:
# Exemplo: vetor
v2 <- scan()
# digite os números do v1, ao terminar, tecle enter
A função scan()
também pode ler dados de arquivos, mas a sua saída é um vetor, ou seja ela não mantém a estrutura dos dados contidos no arquivo.
# Exemplo: vetor
vetor_aq <- scan("data/airquality.txt")
# parte inicial dos dados
head(vetor_aq, 100)
#> [1] 41.0 190.0 7.4 67.0 5.0 1.0 36.0 118.0 8.0 72.0
#> [11] 5.0 2.0 12.0 149.0 12.6 74.0 5.0 3.0 18.0 313.0
#> [21] 11.5 62.0 5.0 4.0 -99.9 -99.9 14.3 56.0 5.0 5.0
#> [31] 28.0 -99.9 14.9 66.0 5.0 6.0 23.0 299.0 8.6 65.0
#> [41] 5.0 7.0 19.0 99.0 13.8 59.0 5.0 8.0 8.0 19.0
#> [51] 20.1 61.0 5.0 9.0 -99.9 194.0 8.6 69.0 5.0 10.0
#> [61] 7.0 -999.0 6.9 74.0 5.0 11.0 16.0 256.0 9.7 69.0
#> [71] 5.0 12.0 11.0 290.0 9.2 66.0 5.0 13.0 14.0 274.0
#> [81] 10.9 68.0 5.0 14.0 18.0 65.0 13.2 58.0 5.0 15.0
#> [91] 14.0 334.0 11.5 64.0 5.0 16.0 34.0 307.0 12.0 66.0
# parte final
tail(vetor_aq, 100)
#> [1] 24.0 10.9 71.0 9.0 14.0 13.0 112.0 11.5 71.0 9.0 15.0
#> [12] 46.0 237.0 6.9 78.0 9.0 16.0 18.0 224.0 13.8 67.0 9.0
#> [23] 13.0 27.0 10.3 76.0 9.0 18.0 24.0 238.0 10.3 68.0 9.0
#> [34] 19.0 16.0 201.0 8.0 82.0 9.0 20.0 13.0 238.0 12.6 64.0
#> [45] 9.0 21.0 23.0 14.0 9.2 71.0 9.0 22.0 36.0 139.0 10.3
#> [56] 81.0 9.0 23.0 7.0 49.0 10.3 69.0 9.0 24.0 14.0 20.0
#> [67] 16.6 63.0 9.0 25.0 30.0 193.0 6.9 70.0 9.0 26.0 -99.9
#> [78] 145.0 13.2 77.0 9.0 27.0 14.0 191.0 14.3 75.0 9.0 28.0
#> [89] 18.0 131.0 8.0 76.0 9.0 29.0 20.0 223.0 11.5 68.0 9.0
#> [100] 30.0
# dados são importados como vetor
is.vector(vetor_aq)
#> [1] TRUE
mode(vetor_aq)
#> [1] "numeric"
Vimos que dataframes
são geralmente criados pela função data.frame
, conforme o exemplo abaixo.
# Exemplo: dataframe
dados <- data.frame(dates = c("2013-01-01", "2013-01-01", "2013-01-01"),
cidade = c("Santa Maria", "Sao Sepe", "Caçapava"),
temperatura = c(31, 35, 21),
chuva = c(3, 10, 14))
dados
#> dates cidade temperatura chuva
#> 1 2013-01-01 Santa Maria 31 3
#> 2 2013-01-01 Sao Sepe 35 10
#> 3 2013-01-01 Caçapava 21 14
Para ler apenas uma linha de dados a partir do teclado como character
usamos a função readline()
:
sentenca <- readline(prompt = "digite alguma coisa e tecle enter para continuar: ")
#> digite alguma coisa e tecle enter para continuar:
sentenca
#> [1] ""
Esta função pode ser utilizada como uma forma de controlar um looping. Esse exemplo ilustra o uso da função lapply()
para execução de laços ou loopings ao longo de um vetor de índices. Essa função será vista futuramente no curso.
# para reprodutibilidade
set.seed(123)
# looping ao longo da sequência de 1 a 5
l <- sapply(1:5,
function(i){
# cria vetor com números aleatórios com distribuição uniforme
x <- runif(n = 100, min = 1,max = 50)
# anomalia acumulada
y <- cumsum(x - mean(x))
plot(y, type = "o")
abline(h = 0, lty = 2)
# leitura de linha, só após teclar enter vai gerar próximo gráfico
readline(prompt = "tecle <enter> para continuar: ")
}
)
l
No modo interativo do R podemos imprimir os valores de um objeto na tela digitando o nome do objeto.
x <- 1:3
y <- x^2
y
#> [1] 1 4 9
# ou
print(x^2)
#> [1] 1 4 9
Entretanto isso não é possível quando precisamos mostrar o valor de uma variável dentro do corpo de uma função ou dentro de um laço (looping). Nesse caso podemos usar a função print()
:
# dentro de uma função
# digitando o nome do objeto não imprimi na tela
fcubo <- function(x) {
classe <- class(x)
# intenção de mostrar objeto de entrada
classe
x^3
}
fcubo(2)
#> [1] 8
# adicionando print
cubo <- function(x) {
# mostra objeto de entrada
classe <- class(x)
print(classe)
x^3
}
fcubo(-3) # não imprime classe do objeto de entrada
#> [1] -27
cubo(-3) # imprime classe do objeto de entrada
#> [1] "numeric"
#> [1] -27
É melhor usar a função cat()
ao invés da função print()
, já que a print()
permite a impressão de apenas um único objeto enquanto a cat()
não. Compare os resultados das duas funções:
print("abc")
#> [1] "abc"
cat("abc\n") # \n indica quebra de linha
#> abc
x
#> [1] 1 2 3
cat("os elementos de x são: ", x, "\n")
#> os elementos de x são: 1 2 3
cat("os elementos de x são: ", x, sep = "")
#> os elementos de x são: 123
cat("os elementos de x são: ", x, sep = "\n")
#> os elementos de x são:
#> 1
#> 2
#> 3
k <- c(5, 12, 13, 8, 88)
cat(k, sep = c(".","___"," ---> ","\n","\n"))
#> 5.12___13 ---> 8
#> 88
Imagine que você tivesse recebido essa amostra de dados por e-mail:
dates cidade temperatura chuva
2013-01-01 SM 13 3
2013-01-01 SS 30 10
2013-01-01 CV 22 12
Para converter essa pequena amostra de dados em um dataframe nós podemos selecionar, copiar e colar o texto no primeiro argumento da função textConnection
, e então usar a função read.table
.
texto <- " dates cidade temperatura chuva
2013-01-01 SM 31 3
2013-01-01 SS 35 10
2013-01-01 CV 21 14"
# conexão de texto
tc <- textConnection(object = texto)
tc
#> A connection with
#> description "texto"
#> class "textConnection"
#> mode "r"
#> text "text"
#> opened "opened"
#> can read "yes"
#> can write "no"
x <- read.table(file = tc, header = TRUE)
x
#> dates cidade temperatura chuva
#> 1 2013-01-01 SM 31 3
#> 2 2013-01-01 SS 35 10
#> 3 2013-01-01 CV 21 14
Uma função útil para passar os dados a alguém que precisa reproduzi-los é a função dput()
(que pode ser traduzido como "despejar"). Ela escreve uma representação textual de um objeto R que pode ser escrita em um arquivo. Para recriar o objeto basta usar a função dget()
.
x
#> dates cidade temperatura chuva
#> 1 2013-01-01 SM 31 3
#> 2 2013-01-01 SS 35 10
#> 3 2013-01-01 CV 21 14
# representação textual do objeto x
dput(x)
#> structure(list(dates = structure(c(1L, 1L, 1L), .Label = "2013-01-01", class = "factor"),
#> cidade = structure(c(2L, 3L, 1L), .Label = c("CV", "SM",
#> "SS"), class = "factor"), temperatura = c(31L, 35L, 21L),
#> chuva = c(3L, 10L, 14L)), .Names = c("dates", "cidade", "temperatura",
#> "chuva"), class = "data.frame", row.names = c(NA, -3L))
# salva representação textual de x em um arquivo
dput(x, file = "data/x.txt")
# recuperando x a partir do arquivo
y <- dget("data/x.txt")
# alterar valores de y
y <- y[, 3:4] - sqrt(2)
y
#> temperatura chuva
#> 1 29.58579 1.585786
#> 2 33.58579 8.585786
#> 3 19.58579 12.585786
# verificar existência de x e y
ls()
#> [1] "cubo" "dados" "fcubo" "k" "pcks" "sentenca"
#> [7] "tc" "texto" "v1" "vetor_aq" "x" "y"
# listando variáveis que começam com x ou y
ls(pattern = "^[xy]")
#> [1] "x" "y"
# salvando mais de um objeto em um arquivo
dump(ls(pattern = "^[xy]"), file = "R/xy.R")
# vamos apagar x e y do espaco de trabalho
rm(x, y)
# x e y não existem mais
ls()
#> [1] "cubo" "dados" "fcubo" "k" "pcks" "sentenca"
#> [7] "tc" "texto" "v1" "vetor_aq"
# recuperando os objetos x e y salvos em xy.R
source("R/xy.R")
ls()
#> [1] "cubo" "dados" "fcubo" "k" "pcks" "sentenca"
#> [7] "tc" "texto" "v1" "vetor_aq" "x" "y"
x
#> dates cidade temperatura chuva
#> 1 2013-01-01 SM 31 3
#> 2 2013-01-01 SS 35 10
#> 3 2013-01-01 CV 21 14
y
#> temperatura chuva
#> 1 29.58579 1.585786
#> 2 33.58579 8.585786
#> 3 19.58579 12.585786
Portanto diferente da escrita dos dados em si para um arquivo texto as funções dump()
e dput()
armazenam os dados e os metadados, assim outro usuário não precisa especificá-los novamente. Assim o usuário que recebe a saída do dput()
em um arquivo, pode recriar os dados pelo comando dget("nomedoarquivo")
.
# representação textual de um data.frame
x2 <- structure(list(dates = c("2013-01-01", "2013-01-01", "2013-01-01"),
cidade = c("SM", "SS", "CV"),
temperatura = c(31L, 35L, 21L),
chuva = c(3L, 10L, 14L)),
.Names = c("dates", "cidade", "temperatura", "chuva"),
class = "data.frame",
row.names = c(NA, -3L)
)
x2
#> dates cidade temperatura chuva
#> 1 2013-01-01 SM 31 3
#> 2 2013-01-01 SS 35 10
#> 3 2013-01-01 CV 21 14
Vantagens:
- armazena os dados e os metadados
- rápida e fácil recuperação dos dados
Desvantagens:
- armazenamento de dados nesse formato não é muito eficiente em termos de espaço em disco
- pouca legibilidade dos dados
Esse procedimento é geralmente recomendado para fornecer pequenas amostras de dados (e-mails por exemplo)
O R
possui diversos conjuntos de dados internos que são automaticamente carregados quando iniciado. Esses dados são usados nos exemplos do help()
de diversas funções para ilustrar o uso e a aplicação delas. Esses dados podem ser carregados com a função data
.
data()
# Annual Precipitation in US Cities, p/ mais informações "?precip"
data(precip)
# primeiros 30 elementos dos dados precip
head(precip, n = 30)
#> Mobile Juneau Phoenix
#> 67.0 54.7 7.0
#> Little Rock Los Angeles Sacramento
#> 48.5 14.0 17.2
#> San Francisco Denver Hartford
#> 20.7 13.0 43.4
#> Wilmington Washington Jacksonville
#> 40.2 38.9 54.5
#> Miami Atlanta Honolulu
#> 59.8 48.3 22.9
#> Boise Chicago Peoria
#> 11.5 34.4 35.1
#> Indianapolis Des Moines Wichita
#> 38.7 30.8 30.6
#> Louisville New Orleans Portland
#> 43.1 56.8 40.8
#> Baltimore Boston Detroit
#> 41.8 42.5 31.0
#> Sault Ste. Marie Duluth Minneapolis/St Paul
#> 31.7 30.2 25.9
# New York Air Quality Measurements, , p/ mais informações "?airquality"
data(airquality)
# primeiras linhas dos dados
head(airquality, n = 10)
#> Ozone Solar.R Wind Temp Month Day
#> 1 41 190 7.4 67 5 1
#> 2 36 118 8.0 72 5 2
#> 3 12 149 12.6 74 5 3
#> 4 18 313 11.5 62 5 4
#> 5 NA NA 14.3 56 5 5
#> 6 28 NA 14.9 66 5 6
#> 7 23 299 8.6 65 5 7
#> 8 19 99 13.8 59 5 8
#> 9 8 19 20.1 61 5 9
#> 10 NA 194 8.6 69 5 10
Dados armazenados em um arquivo texto (do tipo ASCII) podem ser facilmente importados no R.
O formato mais comum de armazenar uma tabela de dados num arquivo texto é com os registros ao longo das linhas e as variáveis ao longo das colunas. Os valores de cada coluna de uma linha são separados por um caractere separador: vírgula (,
), espaço (,
), tab (\t
) e etc.
A função mais importante para leitura de dados de um arquivo texto é a read.table()
que armazena os dados no formato de uma dataframe. Essa função possui diversos parâmetros para ajustar a importação de acordo com as peculiaridades do formato de dados do arquivo. O valor default do parâmetro sep
é um ou mais caracteres de espaço
e tabs
. Devido as diversas opções de separadores existem outras funções essencialmente iguais a read.table()
com a diferença no separador, por exemplo as funções: read.csv(), read.csv2(), read.delim()
usam como o argumento separador ,
, ;
e \t
. Para detalhes sobre essas funções o help de cada uma. Uma vez que essas funções aceitam qualquer argumento da read.table()
elas são mais convenientes que usar a read.table()
e configurar os argumentos apropriados manualmente.
Alguns argumentos da função read.table()
são:
file
nome do arquivoheader
lógico (TRUE ou FALSE) indicando se o arquivo tem ou não linha de cabeçalhosep
um caractere indicando como as colunas são separadascolClasses
, um vetor caractere indicando as classes de cada coluna no conjunto de dadosnrows
, número de linhas no conjunto de dadoscomment.char
, um caractere indicando o caractere usado como comentário (para ignorar essas linhas)skip
, o número de linhas que devem ser "puladas" desde o início do arquivostringsAsFactors
, lógico, as variáveis do tipocharacter
devem ser codificadas comofactor
?
Esse último argumento pode ser definido também através da configuração global de opções no R pelo comando: options(stringsAsFactors=FALSE)
.
Quando se faz a leitura de dados com read.table("nome_do_arquivo")
o R automaticamente:
- pula linhas que começam com '#'
- descobre quantas linhas tem o arquivo e quanta memória precisa ser alocada
- descobre qual o tipo de variável em cada coluna
Para arquivos de tamanho moderado a pequeno essa forma de especificar os argumentos funciona satisfatoriamente. Vamos ver alguns exemplos de leitura de dados hidrometeorológicos no formato texto amplamente usados em aplicações da Meteorologia.
# definindo interpretação de caracteres: caracteres não devem ser tratados como fatores
options(stringsAsFactors = FALSE)
# leitura de dados pluviométricos diários da ANA
dprec <- read.csv2(file = "data/CHUVAS.TXT",
skip = 15,
head = T,
fill = T)
# primeiras linhas
head(dprec)
#> X..EstacaoCodigo NivelConsistencia Data TipoMedicaoChuvas Maxima
#> 1 3054002 1 01/01/1934 1 NA
#> 2 3054002 1 01/02/1934 1 66.3
#> 3 3054002 1 01/03/1934 1 55.0
#> 4 3054002 1 01/04/1934 1 54.5
#> 5 3054002 1 01/05/1934 1 30.5
#> 6 3054002 1 01/06/1934 1 42.5
#> Total DiaMaxima NumDiasDeChuva MaximaStatus TotalStatus
#> 1 NA NA NA 0 0
#> 2 174.7 6 10 1 1
#> 3 160.7 9 10 1 1
#> 4 98.4 1 4 1 1
#> 5 119.4 29 8 1 1
#> 6 191.6 13 11 1 1
#> NumDiasDeChuvaStatus TotalAnual TotalAnualStatus Chuva01 Chuva02 Chuva03
#> 1 0 NA 0 NA NA NA
#> 2 0 NA 0 15.5 3.5 0.0
#> 3 0 NA 0 0.0 0.0 0.0
#> 4 0 NA 0 54.5 0.0 0.0
#> 5 1 NA 0 0.0 19.0 26.7
#> 6 0 NA 0 0.0 0.0 21.5
#> Chuva04 Chuva05 Chuva06 Chuva07 Chuva08 Chuva09 Chuva10 Chuva11 Chuva12
#> 1 NA 10.5 3.0 11.1 0.0 0 0.0 0.0 0.0
#> 2 0.0 11.9 66.3 1.0 40.0 0 0.0 0.0 1.1
#> 3 0.0 0.0 0.0 0.0 0.0 55 11.7 5.0 0.0
#> 4 0.0 0.0 18.5 0.0 19.5 0 0.0 0.0 0.0
#> 5 0.0 3.2 4.2 0.0 0.0 0 0.0 0.0 0.0
#> 6 12.7 8.7 0.0 0.0 0.0 0 0.0 27.3 37.5
#> Chuva13 Chuva14 Chuva15 Chuva16 Chuva17 Chuva18 Chuva19 Chuva20 Chuva21
#> 1 0.0 0.0 0 37.6 0 18.4 12.5 0.0 0.0
#> 2 24.7 0.0 0 0.0 0 0.0 0.0 0.0 0.0
#> 3 7.5 9.5 0 3.0 1 23.0 0.0 0.0 0.0
#> 4 0.0 0.0 0 0.0 0 0.0 0.0 0.0 0.0
#> 5 0.0 0.0 0 0.0 0 0.0 0.0 0.0 20.5
#> 6 42.5 0.0 0 0.0 0 0.0 0.0 0.7 3.2
#> Chuva22 Chuva23 Chuva24 Chuva25 Chuva26 Chuva27 Chuva28 Chuva29 Chuva30
#> 1 67.5 12.3 0.0 0.0 0 0 0 0.0 0.0
#> 2 0.0 0.0 8.2 2.5 0 0 0 NA NA
#> 3 0.0 0.0 0.0 0.0 0 0 0 0.0 23.5
#> 4 0.0 0.0 0.0 5.9 0 0 0 0.0 0.0
#> 5 0.0 0.0 0.0 1.3 0 0 14 30.5 0.0
#> 6 3.0 0.0 33.5 0.0 0 0 1 0.0 0.0
#> Chuva31 Chuva01Status Chuva02Status Chuva03Status Chuva04Status
#> 1 0.0 0 0 0 0
#> 2 NA 1 1 1 1
#> 3 21.5 1 1 1 1
#> 4 NA 1 1 1 1
#> 5 0.0 1 1 1 1
#> 6 NA 1 1 1 1
#> Chuva05Status Chuva06Status Chuva07Status Chuva08Status Chuva09Status
#> 1 1 1 1 1 1
#> 2 1 1 1 1 1
#> 3 1 1 1 1 1
#> 4 1 1 1 1 1
#> 5 1 1 1 1 1
#> 6 1 1 1 1 1
#> Chuva10Status Chuva11Status Chuva12Status Chuva13Status Chuva14Status
#> 1 1 1 1 1 1
#> 2 1 1 1 1 1
#> 3 1 1 1 1 1
#> 4 1 1 1 1 1
#> 5 1 1 1 1 1
#> 6 1 1 1 1 1
#> Chuva15Status Chuva16Status Chuva17Status Chuva18Status Chuva19Status
#> 1 1 1 1 1 1
#> 2 1 1 1 1 1
#> 3 1 1 1 1 1
#> 4 1 1 1 1 1
#> 5 1 1 1 1 1
#> 6 1 1 1 1 1
#> Chuva20Status Chuva21Status Chuva22Status Chuva23Status Chuva24Status
#> 1 1 1 1 1 1
#> 2 1 1 1 1 1
#> 3 1 1 1 1 1
#> 4 1 1 1 1 1
#> 5 1 1 1 1 1
#> 6 1 1 1 1 1
#> Chuva25Status Chuva26Status Chuva27Status Chuva28Status Chuva29Status
#> 1 1 1 1 1 1
#> 2 1 1 1 1 0
#> 3 1 1 1 1 1
#> 4 1 1 1 1 1
#> 5 1 1 1 1 1
#> 6 1 1 1 1 1
#> Chuva30Status Chuva31Status X
#> 1 1 1 NA
#> 2 0 0 NA
#> 3 1 1 NA
#> 4 1 0 NA
#> 5 1 1 NA
#> 6 1 0 NA
# últimas linhas
tail(dprec)
#> X..EstacaoCodigo NivelConsistencia Data TipoMedicaoChuvas
#> 1279 3054002 2 01/07/2005 1
#> 1280 3054002 2 01/08/2005 1
#> 1281 3054002 2 01/09/2005 1
#> 1282 3054002 2 01/10/2005 1
#> 1283 3054002 2 01/11/2005 1
#> 1284 3054002 2 01/12/2005 1
#> Maxima Total DiaMaxima NumDiasDeChuva MaximaStatus TotalStatus
#> 1279 44.8 69.5 4 4 1 1
#> 1280 19.9 91.4 30 9 1 1
#> 1281 49.8 149.2 24 12 1 1
#> 1282 57.2 145.3 4 6 1 1
#> 1283 14.2 36.0 24 5 1 1
#> 1284 11.2 22.0 31 6 1 1
#> NumDiasDeChuvaStatus TotalAnual TotalAnualStatus Chuva01 Chuva02
#> 1279 1 1123.4 1 0.0 0.0
#> 1280 1 1123.4 1 0.0 0.0
#> 1281 1 1123.4 1 3.8 11.3
#> 1282 1 1123.4 1 0.0 0.0
#> 1283 1 1123.4 1 0.0 0.0
#> 1284 1 1123.4 1 0.0 0.0
#> Chuva03 Chuva04 Chuva05 Chuva06 Chuva07 Chuva08 Chuva09 Chuva10
#> 1279 0 44.8 0.0 0.0 0.0 0 0.0 0.0
#> 1280 0 0.0 0.0 0.0 0.5 0 0.1 0.0
#> 1281 0 0.0 0.0 0.0 0.0 0 8.9 24.7
#> 1282 0 57.2 19.6 0.0 0.0 0 0.0 0.0
#> 1283 0 0.0 13.2 6.3 0.0 0 0.0 0.0
#> 1284 0 2.1 1.9 0.0 0.0 0 0.0 0.0
#> Chuva11 Chuva12 Chuva13 Chuva14 Chuva15 Chuva16 Chuva17 Chuva18
#> 1279 0.0 0 0 0.0 0.0 12.9 9.7 0.0
#> 1280 0.0 0 0 0.0 0.0 0.0 0.0 14.1
#> 1281 9.7 0 0 0.2 15.6 0.1 0.0 3.2
#> 1282 0.0 0 0 46.3 0.0 3.9 0.2 0.0
#> 1283 0.0 0 0 0.0 1.4 0.0 0.9 0.0
#> 1284 0.0 0 0 0.0 0.0 0.0 2.2 0.0
#> Chuva19 Chuva20 Chuva21 Chuva22 Chuva23 Chuva24 Chuva25 Chuva26
#> 1279 0.0 0 0.0 2.1 0.0 0.0 0.0 0
#> 1280 0.0 0 6.3 19.7 6.4 17.1 0.0 0
#> 1281 4.5 0 0.0 0.0 0.0 49.8 0.0 0
#> 1282 0.0 0 0.0 0.0 0.0 0.0 18.1 0
#> 1283 0.0 0 0.0 0.0 0.0 14.2 0.0 0
#> 1284 0.7 0 0.0 0.0 0.0 0.0 0.0 0
#> Chuva27 Chuva28 Chuva29 Chuva30 Chuva31 Chuva01Status Chuva02Status
#> 1279 0 0 0.0 0.0 0.0 1 1
#> 1280 0 0 7.3 19.9 0.0 1 1
#> 1281 0 0 0.0 17.4 NA 1 1
#> 1282 0 0 0.0 0.0 0.0 1 1
#> 1283 0 0 0.0 0.0 NA 1 1
#> 1284 0 0 0.0 3.9 11.2 1 1
#> Chuva03Status Chuva04Status Chuva05Status Chuva06Status Chuva07Status
#> 1279 1 1 1 1 1
#> 1280 1 1 1 1 1
#> 1281 1 1 1 1 1
#> 1282 1 1 1 1 1
#> 1283 1 1 1 1 1
#> 1284 1 1 1 1 1
#> Chuva08Status Chuva09Status Chuva10Status Chuva11Status Chuva12Status
#> 1279 1 1 1 1 1
#> 1280 1 1 1 1 1
#> 1281 1 1 1 1 1
#> 1282 1 1 1 1 1
#> 1283 1 1 1 1 1
#> 1284 1 1 1 1 1
#> Chuva13Status Chuva14Status Chuva15Status Chuva16Status Chuva17Status
#> 1279 1 1 1 1 1
#> 1280 1 1 1 1 1
#> 1281 1 1 1 1 1
#> 1282 1 1 1 1 1
#> 1283 1 1 1 1 1
#> 1284 1 1 1 1 1
#> Chuva18Status Chuva19Status Chuva20Status Chuva21Status Chuva22Status
#> 1279 1 1 1 1 1
#> 1280 1 1 1 1 1
#> 1281 1 1 1 1 1
#> 1282 1 1 1 1 1
#> 1283 1 1 1 1 1
#> 1284 1 1 1 1 1
#> Chuva23Status Chuva24Status Chuva25Status Chuva26Status Chuva27Status
#> 1279 1 1 1 1 1
#> 1280 1 1 1 1 1
#> 1281 1 1 1 1 1
#> 1282 1 1 1 1 1
#> 1283 1 1 1 1 1
#> 1284 1 1 1 1 1
#> Chuva28Status Chuva29Status Chuva30Status Chuva31Status X
#> 1279 1 1 1 1 NA
#> 1280 1 1 1 1 NA
#> 1281 1 1 1 0 NA
#> 1282 1 1 1 1 NA
#> 1283 1 1 1 0 NA
#> 1284 1 1 1 1 NA
# corrigindo nome da primeira coluna
names(dprec)[1] <- "EstacaoCodigo"
# removendo última coluna que só tem NAs
dprec <- dprec[ , -ncol(dprec)]
# estrutura dos dados
str(dprec)
#> 'data.frame': 1284 obs. of 75 variables:
#> $ EstacaoCodigo : int 3054002 3054002 3054002 3054002 3054002 3054002 3054002 3054002 3054002 3054002 ...
#> $ NivelConsistencia : int 1 1 1 1 1 1 1 1 1 1 ...
#> $ Data : chr "01/01/1934" "01/02/1934" "01/03/1934" "01/04/1934" ...
#> $ TipoMedicaoChuvas : int 1 1 1 1 1 1 1 1 1 1 ...
#> $ Maxima : num NA 66.3 55 54.5 30.5 42.5 10.5 30.3 36.8 69.2 ...
#> $ Total : num NA 174.7 160.7 98.4 119.4 ...
#> $ DiaMaxima : int NA 6 9 1 29 13 6 30 19 5 ...
#> $ NumDiasDeChuva : int NA 10 10 4 8 11 7 8 4 7 ...
#> $ MaximaStatus : int 0 1 1 1 1 1 1 1 1 1 ...
#> $ TotalStatus : int 0 1 1 1 1 1 1 1 1 1 ...
#> $ NumDiasDeChuvaStatus: int 0 0 0 0 1 0 0 0 0 0 ...
#> $ TotalAnual : num NA NA NA NA NA NA NA NA NA NA ...
#> $ TotalAnualStatus : int 0 0 0 0 0 0 0 0 0 0 ...
#> $ Chuva01 : num NA 15.5 0 54.5 0 0 0 0 0 0 ...
#> $ Chuva02 : num NA 3.5 0 0 19 0 0 0 0 0 ...
#> $ Chuva03 : num NA 0 0 0 26.7 21.5 0 0 0 0 ...
#> $ Chuva04 : num NA 0 0 0 0 12.7 0 0 0 20.8 ...
#> $ Chuva05 : num 10.5 11.9 0 0 3.2 8.7 0 27.5 0 69.2 ...
#> $ Chuva06 : num 3 66.3 0 18.5 4.2 0 10.5 0 5 6.1 ...
#> $ Chuva07 : num 11.1 1 0 0 0 0 4 2.9 0 0 ...
#> $ Chuva08 : num 0 40 0 19.5 0 0 0 5.4 0 0 ...
#> $ Chuva09 : num 0 0 55 0 0 0 0 0 0 0 ...
#> $ Chuva10 : num 0 0 11.7 0 0 0 0 13.6 0 0 ...
#> $ Chuva11 : num 0 0 5 0 0 27.3 0 0 34.5 0 ...
#> $ Chuva12 : num 0 1.1 0 0 0 37.5 0 0 0 0 ...
#> $ Chuva13 : num 0 24.7 7.5 0 0 42.5 1.2 0 0 0 ...
#> $ Chuva14 : num 0 0 9.5 0 0 0 0.7 0 0 0 ...
#> $ Chuva15 : num 0 0 0 0 0 0 0 0 0 0 ...
#> $ Chuva16 : num 37.6 0 3 0 0 0 0 1.8 0 0 ...
#> $ Chuva17 : num 0 0 1 0 0 0 0 17 0 0 ...
#> $ Chuva18 : num 18.4 0 23 0 0 0 7.2 0 0 0 ...
#> $ Chuva19 : num 12.5 0 0 0 0 0 0 0 36.8 0 ...
#> $ Chuva20 : num 0 0 0 0 0 0.7 0 0 17.7 0 ...
#> $ Chuva21 : num 0 0 0 0 20.5 3.2 0 0 0 0 ...
#> $ Chuva22 : num 67.5 0 0 0 0 3 0 0 0 0 ...
#> $ Chuva23 : num 12.3 0 0 0 0 0 0 0 0 14 ...
#> $ Chuva24 : num 0 8.2 0 0 0 33.5 0 0 0 40 ...
#> $ Chuva25 : num 0 2.5 0 5.9 1.3 0 0 0 0 1 ...
#> $ Chuva26 : num 0 0 0 0 0 0 1.1 0 0 5.4 ...
#> $ Chuva27 : num 0 0 0 0 0 0 5.9 0 0 0 ...
#> $ Chuva28 : num 0 0 0 0 14 1 0 0 0 0 ...
#> $ Chuva29 : num 0 NA 0 0 30.5 0 0 0 0 0 ...
#> $ Chuva30 : num 0 NA 23.5 0 0 0 0 30.3 0 0 ...
#> $ Chuva31 : num 0 NA 21.5 NA 0 NA 0 1.8 NA 0 ...
#> $ Chuva01Status : int 0 1 1 1 1 1 1 1 1 1 ...
#> $ Chuva02Status : int 0 1 1 1 1 1 1 1 1 1 ...
#> $ Chuva03Status : int 0 1 1 1 1 1 1 1 1 1 ...
#> $ Chuva04Status : int 0 1 1 1 1 1 1 1 1 1 ...
#> $ Chuva05Status : int 1 1 1 1 1 1 1 1 1 1 ...
#> $ Chuva06Status : int 1 1 1 1 1 1 1 1 1 1 ...
#> $ Chuva07Status : int 1 1 1 1 1 1 1 1 1 1 ...
#> $ Chuva08Status : int 1 1 1 1 1 1 1 1 1 1 ...
#> $ Chuva09Status : int 1 1 1 1 1 1 1 1 1 1 ...
#> $ Chuva10Status : int 1 1 1 1 1 1 1 1 1 1 ...
#> $ Chuva11Status : int 1 1 1 1 1 1 1 1 1 1 ...
#> $ Chuva12Status : int 1 1 1 1 1 1 1 1 1 1 ...
#> $ Chuva13Status : int 1 1 1 1 1 1 1 1 1 1 ...
#> $ Chuva14Status : int 1 1 1 1 1 1 1 1 1 1 ...
#> $ Chuva15Status : int 1 1 1 1 1 1 1 1 1 1 ...
#> $ Chuva16Status : int 1 1 1 1 1 1 1 1 1 1 ...
#> $ Chuva17Status : int 1 1 1 1 1 1 1 1 1 1 ...
#> $ Chuva18Status : int 1 1 1 1 1 1 1 1 1 1 ...
#> $ Chuva19Status : int 1 1 1 1 1 1 1 1 1 1 ...
#> $ Chuva20Status : int 1 1 1 1 1 1 1 1 1 1 ...
#> $ Chuva21Status : int 1 1 1 1 1 1 1 1 1 1 ...
#> $ Chuva22Status : int 1 1 1 1 1 1 1 1 1 1 ...
#> $ Chuva23Status : int 1 1 1 1 1 1 1 1 1 1 ...
#> $ Chuva24Status : int 1 1 1 1 1 1 1 1 1 1 ...
#> $ Chuva25Status : int 1 1 1 1 1 1 1 1 1 1 ...
#> $ Chuva26Status : int 1 1 1 1 1 1 1 1 1 1 ...
#> $ Chuva27Status : int 1 1 1 1 1 1 1 1 1 1 ...
#> $ Chuva28Status : int 1 1 1 1 1 1 1 1 1 1 ...
#> $ Chuva29Status : int 1 0 1 1 1 1 1 1 1 1 ...
#> $ Chuva30Status : int 1 0 1 1 1 1 1 1 1 1 ...
#> $ Chuva31Status : int 1 0 1 0 1 0 1 1 0 1 ...
# Fazendo a mesma leitura com read.table
dprec2 <- read.table(file = "data/CHUVAS.TXT",
skip = 15,
head = T,
stringsAsFactors = FALSE,
fill = T,
sep = ";",
dec = ",")
head(dprec2)
#> X..EstacaoCodigo NivelConsistencia Data TipoMedicaoChuvas Maxima
#> 1 3054002 1 01/01/1934 1 NA
#> 2 3054002 1 01/02/1934 1 66.3
#> 3 3054002 1 01/03/1934 1 55.0
#> 4 3054002 1 01/04/1934 1 54.5
#> 5 3054002 1 01/05/1934 1 30.5
#> 6 3054002 1 01/06/1934 1 42.5
#> Total DiaMaxima NumDiasDeChuva MaximaStatus TotalStatus
#> 1 NA NA NA 0 0
#> 2 174.7 6 10 1 1
#> 3 160.7 9 10 1 1
#> 4 98.4 1 4 1 1
#> 5 119.4 29 8 1 1
#> 6 191.6 13 11 1 1
#> NumDiasDeChuvaStatus TotalAnual TotalAnualStatus Chuva01 Chuva02 Chuva03
#> 1 0 NA 0 NA NA NA
#> 2 0 NA 0 15.5 3.5 0.0
#> 3 0 NA 0 0.0 0.0 0.0
#> 4 0 NA 0 54.5 0.0 0.0
#> 5 1 NA 0 0.0 19.0 26.7
#> 6 0 NA 0 0.0 0.0 21.5
#> Chuva04 Chuva05 Chuva06 Chuva07 Chuva08 Chuva09 Chuva10 Chuva11 Chuva12
#> 1 NA 10.5 3.0 11.1 0.0 0 0.0 0.0 0.0
#> 2 0.0 11.9 66.3 1.0 40.0 0 0.0 0.0 1.1
#> 3 0.0 0.0 0.0 0.0 0.0 55 11.7 5.0 0.0
#> 4 0.0 0.0 18.5 0.0 19.5 0 0.0 0.0 0.0
#> 5 0.0 3.2 4.2 0.0 0.0 0 0.0 0.0 0.0
#> 6 12.7 8.7 0.0 0.0 0.0 0 0.0 27.3 37.5
#> Chuva13 Chuva14 Chuva15 Chuva16 Chuva17 Chuva18 Chuva19 Chuva20 Chuva21
#> 1 0.0 0.0 0 37.6 0 18.4 12.5 0.0 0.0
#> 2 24.7 0.0 0 0.0 0 0.0 0.0 0.0 0.0
#> 3 7.5 9.5 0 3.0 1 23.0 0.0 0.0 0.0
#> 4 0.0 0.0 0 0.0 0 0.0 0.0 0.0 0.0
#> 5 0.0 0.0 0 0.0 0 0.0 0.0 0.0 20.5
#> 6 42.5 0.0 0 0.0 0 0.0 0.0 0.7 3.2
#> Chuva22 Chuva23 Chuva24 Chuva25 Chuva26 Chuva27 Chuva28 Chuva29 Chuva30
#> 1 67.5 12.3 0.0 0.0 0 0 0 0.0 0.0
#> 2 0.0 0.0 8.2 2.5 0 0 0 NA NA
#> 3 0.0 0.0 0.0 0.0 0 0 0 0.0 23.5
#> 4 0.0 0.0 0.0 5.9 0 0 0 0.0 0.0
#> 5 0.0 0.0 0.0 1.3 0 0 14 30.5 0.0
#> 6 3.0 0.0 33.5 0.0 0 0 1 0.0 0.0
#> Chuva31 Chuva01Status Chuva02Status Chuva03Status Chuva04Status
#> 1 0.0 0 0 0 0
#> 2 NA 1 1 1 1
#> 3 21.5 1 1 1 1
#> 4 NA 1 1 1 1
#> 5 0.0 1 1 1 1
#> 6 NA 1 1 1 1
#> Chuva05Status Chuva06Status Chuva07Status Chuva08Status Chuva09Status
#> 1 1 1 1 1 1
#> 2 1 1 1 1 1
#> 3 1 1 1 1 1
#> 4 1 1 1 1 1
#> 5 1 1 1 1 1
#> 6 1 1 1 1 1
#> Chuva10Status Chuva11Status Chuva12Status Chuva13Status Chuva14Status
#> 1 1 1 1 1 1
#> 2 1 1 1 1 1
#> 3 1 1 1 1 1
#> 4 1 1 1 1 1
#> 5 1 1 1 1 1
#> 6 1 1 1 1 1
#> Chuva15Status Chuva16Status Chuva17Status Chuva18Status Chuva19Status
#> 1 1 1 1 1 1
#> 2 1 1 1 1 1
#> 3 1 1 1 1 1
#> 4 1 1 1 1 1
#> 5 1 1 1 1 1
#> 6 1 1 1 1 1
#> Chuva20Status Chuva21Status Chuva22Status Chuva23Status Chuva24Status
#> 1 1 1 1 1 1
#> 2 1 1 1 1 1
#> 3 1 1 1 1 1
#> 4 1 1 1 1 1
#> 5 1 1 1 1 1
#> 6 1 1 1 1 1
#> Chuva25Status Chuva26Status Chuva27Status Chuva28Status Chuva29Status
#> 1 1 1 1 1 1
#> 2 1 1 1 1 0
#> 3 1 1 1 1 1
#> 4 1 1 1 1 1
#> 5 1 1 1 1 1
#> 6 1 1 1 1 1
#> Chuva30Status Chuva31Status X
#> 1 1 1 NA
#> 2 0 0 NA
#> 3 1 1 NA
#> 4 1 0 NA
#> 5 1 1 NA
#> 6 1 0 NA
x <- read.csv2(file = "data/83004.txt",
header = FALSE,
skip = 16,
stringsAsFactors = FALSE,
na.strings = ""
)
head(x)
#> V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13
#> 1 83004 02/08/1993 0 <NA> <NA> <NA> <NA> <NA> NA <NA> <NA> NA <NA>
#> 2 83004 01/01/1995 0 <NA> <NA> <NA> 26.8 <NA> NA <NA> <NA> NA <NA>
#> 3 83004 01/01/1995 1200 21.2 22.5 20 <NA> 19.5 80 924.6 <NA> 32 4
#> 4 83004 01/01/1995 1800 <NA> 25.2 21.5 <NA> <NA> 73 922.9 <NA> 32 2
#> 5 83004 02/01/1995 0 <NA> 20.7 20.3 28.9 <NA> 97 924.2 <NA> 0 0
#> 6 83004 02/01/1995 1200 3.2 23.8 20.6 <NA> 19.9 76 924.7 <NA> 32 3
#> V14 V15 V16 V17 V18 V19 V20
#> 1 <NA> <NA> 1.4 <NA> <NA> <NA> NA
#> 2 1.5 <NA> 1.6 22.04 86.75 2 NA
#> 3 <NA> 10 <NA> <NA> <NA> <NA> NA
#> 4 <NA> 10 <NA> <NA> <NA> <NA> NA
#> 5 1.3 10 1.1 23.32 83 2.666667 NA
#> 6 <NA> 10 <NA> <NA> <NA> <NA> NA
str(x)
#> 'data.frame': 5863 obs. of 20 variables:
#> $ V1 : chr "83004" "83004" "83004" "83004" ...
#> $ V2 : chr "02/08/1993" "01/01/1995" "01/01/1995" "01/01/1995" ...
#> $ V3 : int 0 0 1200 1800 0 1200 1800 0 1200 1800 ...
#> $ V4 : chr NA NA "21.2" NA ...
#> $ V5 : chr NA NA "22.5" "25.2" ...
#> $ V6 : chr NA NA "20" "21.5" ...
#> $ V7 : chr NA "26.8" NA NA ...
#> $ V8 : chr NA NA "19.5" NA ...
#> $ V9 : int NA NA 80 73 97 76 66 95 86 94 ...
#> $ V10: chr NA NA "924.6" "922.9" ...
#> $ V11: chr NA NA NA NA ...
#> $ V12: int NA NA 32 32 0 32 32 0 0 5 ...
#> $ V13: chr NA NA "4" "2" ...
#> $ V14: chr NA "1.5" NA NA ...
#> $ V15: chr NA NA "10" "10" ...
#> $ V16: chr "1.4" "1.6" NA NA ...
#> $ V17: chr NA "22.04" NA NA ...
#> $ V18: chr NA "86.75" NA NA ...
#> $ V19: chr NA "2" NA NA ...
#> $ V20: logi NA NA NA NA NA NA ...
Os dados lidos não incluíram a linha de cabeçalho com os nomes das variáveis. Nós pulamos essa linha porque o nome das variáveis está de acordo como número de colunas do arquivo. Então se tentarmos ler um arquivo de dados que contém linhas com número de registros diferentes ocorrerá um erro pois os dados não são tabulares.
Outro aspecto nos dados lidos é que aparecem vários <NA>
, que é o símbolo para dados do tipo character
faltantes. A razão dos terem sido interpretados dessa forma deve-se a um caractere (</pre>
) encontrado na última linha do arquivo. Digite na linha de um terminal linux o comando:
tail data/83004.txt
para imprimir na tela apenas a parte final do arquivo.
Para que os dados numéricos não sejam interpretados como caractere nós poderíamos executar a função read.table(..., nrows = 5878)
, que ignoraria a última linha do arquivo e os dados seriam interpretados como numeric
.
x1 <- read.csv2(file="data/83004.txt",
header = FALSE,
skip = 16,
stringsAsFactors = FALSE,
dec = ".",
na.strings = "",
nrows = 5878
)
head(x1)
#> V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14
#> 1 83004 02/08/1993 0 NA NA NA NA NA NA NA NA NA NA NA
#> 2 83004 01/01/1995 0 NA NA NA 26.8 NA NA NA NA NA NA 1.5
#> 3 83004 01/01/1995 1200 21.2 22.5 20.0 NA 19.5 80 924.6 NA 32 4 NA
#> 4 83004 01/01/1995 1800 NA 25.2 21.5 NA NA 73 922.9 NA 32 2 NA
#> 5 83004 02/01/1995 0 NA 20.7 20.3 28.9 NA 97 924.2 NA 0 0 1.3
#> 6 83004 02/01/1995 1200 3.2 23.8 20.6 NA 19.9 76 924.7 NA 32 3 NA
#> V15 V16 V17 V18 V19 V20
#> 1 NA 1.4 NA NA NA NA
#> 2 NA 1.6 22.04 86.75 2.000000 NA
#> 3 10 NA NA NA NA NA
#> 4 10 NA NA NA NA NA
#> 5 10 1.1 23.32 83.00 2.666667 NA
#> 6 10 NA NA NA NA NA
str(x1)
#> 'data.frame': 5863 obs. of 20 variables:
#> $ V1 : chr "83004" "83004" "83004" "83004" ...
#> $ V2 : chr "02/08/1993" "01/01/1995" "01/01/1995" "01/01/1995" ...
#> $ V3 : int 0 0 1200 1800 0 1200 1800 0 1200 1800 ...
#> $ V4 : num NA NA 21.2 NA NA 3.2 NA NA 4.4 NA ...
#> $ V5 : num NA NA 22.5 25.2 20.7 23.8 26.4 22 23 23.4 ...
#> $ V6 : num NA NA 20 21.5 20.3 20.6 21.6 21.4 21.3 22.6 ...
#> $ V7 : num NA 26.8 NA NA 28.9 NA NA 25.4 NA NA ...
#> $ V8 : num NA NA 19.5 NA NA 19.9 NA NA 20.7 NA ...
#> $ V9 : int NA NA 80 73 97 76 66 95 86 94 ...
#> $ V10: num NA NA 925 923 924 ...
#> $ V11: num NA NA NA NA NA NA NA NA NA NA ...
#> $ V12: int NA NA 32 32 0 32 32 0 0 5 ...
#> $ V13: num NA NA 4 2 0 3 5 0 0 3 ...
#> $ V14: num NA 1.5 NA NA 1.3 NA NA 0.2 NA NA ...
#> $ V15: num NA NA 10 10 10 10 10 10 10 10 ...
#> $ V16: num 1.4 1.6 NA NA 1.1 NA NA 1.3 NA NA ...
#> $ V17: num NA 22 NA NA 23.3 ...
#> $ V18: num NA 86.8 NA NA 83 ...
#> $ V19: num NA 2 NA NA 2.67 ...
#> $ V20: logi NA NA NA NA NA NA ...
Outra alternativa seria converter as colunas de interesse (todas exceto as de 1 a 3) para numeric
através da função as.numeric()
usando a função apply
ao longo das colunas:
# corrigindo classe dos dados
# convertendo de character para numeric
x[, -c(1:3)] <- apply(x[,-c(1:3)], 2, as.numeric)
str(x)
#> 'data.frame': 5863 obs. of 20 variables:
#> $ V1 : chr "83004" "83004" "83004" "83004" ...
#> $ V2 : chr "02/08/1993" "01/01/1995" "01/01/1995" "01/01/1995" ...
#> $ V3 : int 0 0 1200 1800 0 1200 1800 0 1200 1800 ...
#> $ V4 : num NA NA 21.2 NA NA 3.2 NA NA 4.4 NA ...
#> $ V5 : num NA NA 22.5 25.2 20.7 23.8 26.4 22 23 23.4 ...
#> $ V6 : num NA NA 20 21.5 20.3 20.6 21.6 21.4 21.3 22.6 ...
#> $ V7 : num NA 26.8 NA NA 28.9 NA NA 25.4 NA NA ...
#> $ V8 : num NA NA 19.5 NA NA 19.9 NA NA 20.7 NA ...
#> $ V9 : num NA NA 80 73 97 76 66 95 86 94 ...
#> $ V10: num NA NA 925 923 924 ...
#> $ V11: num NA NA NA NA NA NA NA NA NA NA ...
#> $ V12: num NA NA 32 32 0 32 32 0 0 5 ...
#> $ V13: num NA NA 4 2 0 3 5 0 0 3 ...
#> $ V14: num NA 1.5 NA NA 1.3 NA NA 0.2 NA NA ...
#> $ V15: num NA NA 10 10 10 10 10 10 10 10 ...
#> $ V16: num 1.4 1.6 NA NA 1.1 NA NA 1.3 NA NA ...
#> $ V17: num NA 22 NA NA 23.3 ...
#> $ V18: num NA 86.8 NA NA 83 ...
#> $ V19: num NA 2 NA NA 2.67 ...
#> $ V20: num NA NA NA NA NA NA NA NA NA NA ...
# razão dos avisos
as.numeric("NA")
#> Warning: NAs introduced by coercion
#> [1] NA
Mas e o nome das variáveis?
Nós ignoramos a linha de cabeçalho por que nos dados do INMET ocorre uma variável denominada VelocidadeVentoInsolacao
. Essa string deveria ser separada em duas.
# lendo somente o nome das variaveis
vnames <- read.csv2(file="data/83004.txt",
header = FALSE,
skip = 15,
stringsAsFactors = FALSE,
dec = ".",
na.strings = "",
nrows = 1)
vnames
#> V1 V2 V3 V4 V5 V6 V7
#> 1 Estacao Data Hora Precipitacao TempBulboSeco TempBulboUmido TempMaxima
#> V8 V9 V10 V11 V12
#> 1 TempMinima UmidadeRelativa PressaoAtmEstacao PressaoAtmMar DirecaoVento
#> V13 V14 V15 V16
#> 1 VelocidadeVentoInsolacao Nebulosidade Evaporacao Piche Temp Comp Media
#> V17 V18 V19
#> 1 Umidade Relativa Media Velocidade do Vento Media NA
# convertendo de dataframe para vetor
vnames <- c(t(vnames))
# número de variáveis é diferente do número de colunas do arquivo
length(vnames) == ncol(x)
#> [1] FALSE
# corrigindo nomes das variaveis
# substitui "VelocidadeVentoInsolacao" por "VelocidadeVento"
vnames[13] <- "VelocidadeVento"
# acresenta na 14a posição dos nomes a variável "insolacao" e
# desloca os elementos orginais do vetor
vnames <- c(vnames[1:13], "insolacao", vnames[14:length(vnames)])
length(vnames)
#> [1] 20
ncol(x)
#> [1] 20
names(x) <- vnames
head(x)
#> Estacao Data Hora Precipitacao TempBulboSeco TempBulboUmido
#> 1 83004 02/08/1993 0 NA NA NA
#> 2 83004 01/01/1995 0 NA NA NA
#> 3 83004 01/01/1995 1200 21.2 22.5 20.0
#> 4 83004 01/01/1995 1800 NA 25.2 21.5
#> 5 83004 02/01/1995 0 NA 20.7 20.3
#> 6 83004 02/01/1995 1200 3.2 23.8 20.6
#> TempMaxima TempMinima UmidadeRelativa PressaoAtmEstacao PressaoAtmMar
#> 1 NA NA NA NA NA
#> 2 26.8 NA NA NA NA
#> 3 NA 19.5 80 924.6 NA
#> 4 NA NA 73 922.9 NA
#> 5 28.9 NA 97 924.2 NA
#> 6 NA 19.9 76 924.7 NA
#> DirecaoVento VelocidadeVento insolacao Nebulosidade Evaporacao Piche
#> 1 NA NA NA NA 1.4
#> 2 NA NA 1.5 NA 1.6
#> 3 32 4 NA 10 NA
#> 4 32 2 NA 10 NA
#> 5 0 0 1.3 10 1.1
#> 6 32 3 NA 10 NA
#> Temp Comp Media Umidade Relativa Media Velocidade do Vento Media NA
#> 1 NA NA NA NA
#> 2 22.04 86.75 2.000000 NA
#> 3 NA NA NA NA
#> 4 NA NA NA NA
#> 5 23.32 83.00 2.666667 NA
#> 6 NA NA NA NA
Finalmente vamos escrever os dados do INMET corretamente organizados.
write.csv2(x,
file = "data/83004_clean.txt",
na = "-9999",
row.names = FALSE)
Vamos importar o arquivo texto airquality.txt
que possui algumas linhas e colunas faltantes.
# leitura do arquivo airquality.txt
aq0 <- read.table(file = "data/airquality.txt",
na.strings = "-99.9",
head = FALSE)
#> Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec, : line 123 did not have 6 elements
A função count.fields()
permite contar o número de registros em cada linha. Assim encontramos as linhas com número de registros fora do padrão.
# conta o num. de registros por linha
cf <- count.fields(file = "data/airquality.txt", sep = " ")
cf
#> [1] 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
#> [36] 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
#> [71] 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
#> [106] 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5
#> [141] 6 6 6 6 6 6 6 6 6 6 6 6 6
# contando ocorrências de registros
table(cf)
#> cf
#> 5 6
#> 2 151
# linhas com 5 registros
qlinha <- which(cf == 5)
qlinha
#> [1] 123 140
# Contornando a falta de registros com o argumento fill = T
# que preenche colunas faltantes com NA
aq <- read.table(file = "data/airquality.txt",
na.strings = "-99.9",
head = FALSE,
fill = T)
names(aq) <- c("Ozone", "Solar.R", "Wind", "Temp", "Month", "Day")
# primeiras linhas do dados
head(aq)
#> Ozone Solar.R Wind Temp Month Day
#> 1 41 190 7.4 67 5 1
#> 2 36 118 8.0 72 5 2
#> 3 12 149 12.6 74 5 3
#> 4 18 313 11.5 62 5 4
#> 5 NA NA 14.3 56 5 5
#> 6 28 NA 14.9 66 5 6
# resumo da estrutura dos dados
str(aq)
#> 'data.frame': 153 obs. of 6 variables:
#> $ Ozone : int 41 36 12 18 NA 28 23 19 8 NA ...
#> $ Solar.R: int 190 118 149 313 NA NA 299 99 19 194 ...
#> $ Wind : num 7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...
#> $ Temp : int 67 72 74 62 56 66 65 59 61 69 ...
#> $ Month : int 5 5 5 5 5 5 5 5 5 5 ...
#> $ Day : int 1 2 3 4 5 6 7 8 9 10 ...
# resumo estatístico dos dados
summary(aq)
#> Ozone Solar.R Wind Temp
#> Min. : 1.00 Min. :-999.0 Min. : 1.700 Min. :56.00
#> 1st Qu.: 18.00 1st Qu.: 109.2 1st Qu.: 7.400 1st Qu.:72.00
#> Median : 31.50 Median : 202.0 Median : 9.700 Median :79.00
#> Mean : 42.13 Mean : 169.9 Mean : 9.958 Mean :77.88
#> 3rd Qu.: 63.25 3rd Qu.: 258.2 3rd Qu.:11.500 3rd Qu.:85.00
#> Max. :168.00 Max. : 334.0 Max. :20.700 Max. :97.00
#> NA's :37 NA's :5
#> Month Day
#> Min. :5.000 Min. : 1.0
#> 1st Qu.:6.000 1st Qu.: 8.0
#> Median :7.000 Median :16.0
#> Mean :6.993 Mean :15.7
#> 3rd Qu.:8.000 3rd Qu.:23.0
#> Max. :9.000 Max. :31.0
#> NA's :2
# Solar.R == -999 ?
# Radiação solar negativa é fisicamente impossível
# provável erro de digitação para o label de dado faltante
aq <- read.table(file = "data/airquality.txt",
na.strings =c("-99.9","-999"),
head = FALSE,
fill = T)
names(aq) <- c("Ozone", "Solar.R", "Wind", "Temp", "Month", "Day")
summary(aq)
#> Ozone Solar.R Wind Temp
#> Min. : 1.00 Min. : 7.0 Min. : 1.700 Min. :56.00
#> 1st Qu.: 18.00 1st Qu.:115.8 1st Qu.: 7.400 1st Qu.:72.00
#> Median : 31.50 Median :205.0 Median : 9.700 Median :79.00
#> Mean : 42.13 Mean :185.9 Mean : 9.958 Mean :77.88
#> 3rd Qu.: 63.25 3rd Qu.:258.8 3rd Qu.:11.500 3rd Qu.:85.00
#> Max. :168.00 Max. :334.0 Max. :20.700 Max. :97.00
#> NA's :37 NA's :7
#> Month Day
#> Min. :5.000 Min. : 1.0
#> 1st Qu.:6.000 1st Qu.: 8.0
#> Median :7.000 Median :16.0
#> Mean :6.993 Mean :15.7
#> 3rd Qu.:8.000 3rd Qu.:23.0
#> Max. :9.000 Max. :31.0
#> NA's :2
# salvando arquivo com correções em arquivo separado por tab
write.table(x = aq,
file = "data/aq.txt",
sep = "\t",
na = "-999",
dec = ".",
row.names = FALSE)
# mostra arquivo
file.show("data/aq.txt")
Fazendo alterações manuais nos dados aq
via R:
# editar dados
aq_new <- fix(aq)
Alguns arquivos texto com dados tabulares podem não conter separadores (para p.ex. economizar espaço de disco). Outros arquivos podem ser formatados usando largura fixa para reservar o espaço de cada variável, o que facilita a legibilidade dos dados. Nesses casos usamos a função read.fwf()
. Vamos usar como exemplo o arquivo de dados do Índice de Oscilação Sul (SOI) obtido no site do National Weather Service - Climate Prediction Center (NWS-CPC).
# link para os dados do SOI
link <- "http://www.cpc.ncep.noaa.gov/data/indices/soi"
Abrindo o link dos dados no navegador para visualização do formato.
browseURL(url = link)
Leitura dos dados:
#soi <- read.fwf(file = link, # nome do arquivo ou link
soi <- read.fwf(file = "data/SOI.txt", # sem internet, usar esse arquivo
skip = 4, # pula 4 linhas
header = FALSE, # sem cabeçalho
nrows = 70, # num. de linhas
widths = c(4, rep(6,12)), # largura dos campos das variáveis
na.strings = "-999.9", # string para dados faltantes
col.names = scan("data/SOI.txt", # varredura do arquivo
#col.names = scan(link, # varredura do arquivo
what = "character", # tipo dos dados a serem lidos
skip = 3, # pula 3 linhas
nmax = 13) # num. max de registros a serem lidos
)
Vamos alterar a estrutura dos dados: ao invés dos dados serem distribuídos ao longo das colunas, vamos estruturá-los como série temporal, ou seja cada valor mensal corresponderá a uma linha.
# converte a matriz de dados para um vetor (em sequencia cronológica)
soi_v <- c(t(soi[, -1]))
# criando um dataframe com valores de SOI, mes e ano
soi_df <- data.frame(ano = rep(soi$YEAR, each = 12),
mes = rep(1:12, length(soi[,1])),
soi = soi_v)
# escrevendo dados SOI em um arquivo CSV
write.csv(x = soi_df,
file = "data/SOI.csv",
na = "-999.9",
row.names = FALSE)
Vamos ler os dados reestruturados que foram salvos no formato csv usando uma função que permite a escolha do arquivo de forma iterativa.
# leitura de dados com escolha interativa do arquivo
soi.df <- read.csv(file = file.choose(),
# file.choose só é válido em sistema *unix
# no windows é choose.file()
header = T,
na.strings = "-999.9")
Clique duas vezes sobre o arquivo SOI.csv
.
head(soi.df)
#> ano mes soi
#> 1 1951 1 2.5
#> 2 1951 2 1.5
#> 3 1951 3 -0.2
#> 4 1951 4 -0.5
#> 5 1951 5 -1.1
#> 6 1951 6 0.3
str(soi.df)
#> 'data.frame': 840 obs. of 3 variables:
#> $ ano: int 1951 1951 1951 1951 1951 1951 1951 1951 1951 1951 ...
#> $ mes: int 1 2 3 4 5 6 7 8 9 10 ...
#> $ soi: num 2.5 1.5 -0.2 -0.5 -1.1 0.3 -1.7 -0.4 -1.8 -1.6 ...
A função read.fortran()
é uma função similar à read.fwf()
e permite usar especificações de colunas no estilo Fortran.
Em alguns casos é necessário ler arquivos textos sem uma estrutura definida como no caso de arquivos delimitados. Se o arquivo não é bem estruturado é mais fácil ler cada linha de texto separadamente e depois decompor e manipular o conteúdo do texto.
A função readLines()
é adequada para isso. Cada linha é tratada como um elemento de um vetor do tipo character
.
Vamos importar os dados do INMET, mas dessa vez vamos focar no cabeçalho, onde estão as informações da estação meteorológica.
# leitura do cabecalho do arquivo de dados de uma estação do inmet
cab <- readLines("data/83004.txt")
head(cab)
#> [1] "--------------------"
#> [2] "BDMEP - INMET"
#> [3] "--------------------"
#> [4] "Estação : SAO PAULO IAG - SP (OMM: 83004)"
#> [5] "Latitude (graus) : -23.65"
#> [6] "Longitude (graus) : -46.61"
# somente linhas com coordenadas da estação
cab[5:7]
#> [1] "Latitude (graus) : -23.65" "Longitude (graus) : -46.61"
#> [3] "Altitude (metros): 800.00"
is.vector(cab[5:7])
#> [1] TRUE
# arranjando em coluna
cbind(cab[5:7])
#> [,1]
#> [1,] "Latitude (graus) : -23.65"
#> [2,] "Longitude (graus) : -46.61"
#> [3,] "Altitude (metros): 800.00"
# selecionando somente os dados e o nome das variáveis
cab[-c(1:15)][1:10]
#> [1] "Estacao;Data;Hora;Precipitacao;TempBulboSeco;TempBulboUmido;TempMaxima;TempMinima;UmidadeRelativa;PressaoAtmEstacao;PressaoAtmMar;DirecaoVento;VelocidadeVentoInsolacao;Nebulosidade;Evaporacao Piche;Temp Comp Media;Umidade Relativa Media;Velocidade do Vento Media;"
#> [2] "83004;02/08/1993;0000;;;;;;;;;;;;;1.4;;;;"
#> [3] "83004;01/01/1995;0000;;;;26.8;;;;;;;1.5;;1.6;22.04;86.75;2;"
#> [4] "83004;01/01/1995;1200;21.2;22.5;20;;19.5;80;924.6;;32;4;;10;;;;;"
#> [5] "83004;01/01/1995;1800;;25.2;21.5;;;73;922.9;;32;2;;10;;;;;"
#> [6] "83004;02/01/1995;0000;;20.7;20.3;28.9;;97;924.2;;0;0;1.3;10;1.1;23.32;83;2.666667;"
#> [7] "83004;02/01/1995;1200;3.2;23.8;20.6;;19.9;76;924.7;;32;3;;10;;;;;"
#> [8] "83004;02/01/1995;1800;;26.4;21.6;;;66;921.5;;32;5;;10;;;;;"
#> [9] "83004;03/01/1995;0000;;22;21.4;25.4;;95;922.7;;0;0;0.2;10;1.3;22.54;93.5;1;"
#> [10] "83004;03/01/1995;1200;4.4;23;21.3;;20.7;86;923.6;;0;0;;10;;;;;"
# escrevendo dados com writeLines
writeLines(text = cab[-c(1:15)] , con = "data/83004_limpo.txt")
# visualizando dados gerados sem cabeçalho usando função system
# (específico para sistema *unix)
system("head -11 data/83004_limpo.txt", intern = TRUE)
#> [1] "Estacao;Data;Hora;Precipitacao;TempBulboSeco;TempBulboUmido;TempMaxima;TempMinima;UmidadeRelativa;PressaoAtmEstacao;PressaoAtmMar;DirecaoVento;VelocidadeVentoInsolacao;Nebulosidade;Evaporacao Piche;Temp Comp Media;Umidade Relativa Media;Velocidade do Vento Media;"
#> [2] "83004;02/08/1993;0000;;;;;;;;;;;;;1.4;;;;"
#> [3] "83004;01/01/1995;0000;;;;26.8;;;;;;;1.5;;1.6;22.04;86.75;2;"
#> [4] "83004;01/01/1995;1200;21.2;22.5;20;;19.5;80;924.6;;32;4;;10;;;;;"
#> [5] "83004;01/01/1995;1800;;25.2;21.5;;;73;922.9;;32;2;;10;;;;;"
#> [6] "83004;02/01/1995;0000;;20.7;20.3;28.9;;97;924.2;;0;0;1.3;10;1.1;23.32;83;2.666667;"
#> [7] "83004;02/01/1995;1200;3.2;23.8;20.6;;19.9;76;924.7;;32;3;;10;;;;;"
#> [8] "83004;02/01/1995;1800;;26.4;21.6;;;66;921.5;;32;5;;10;;;;;"
#> [9] "83004;03/01/1995;0000;;22;21.4;25.4;;95;922.7;;0;0;0.2;10;1.3;22.54;93.5;1;"
#> [10] "83004;03/01/1995;1200;4.4;23;21.3;;20.7;86;923.6;;0;0;;10;;;;;"
#> [11] "83004;03/01/1995;1800;;23.4;22.6;;;94;922.1;;5;3;;10;;;;;"
A função writeLines()
escreve os elementos do vetor de caracteres um de cada vez em um arquivo texto.
Mas quando os dados são grandes a definição desses argumentos na chamada da função fazem o R rodar de forma mais rápida e eficiente. Quando trabalha-se com dados enormes algumas coisas importantes são:
-
ler o help da
read.table()
, que contém diversas dicas -
fazer um cálculo aproximado da memória requerida para armazenar seus dados, se os dados são maiores que a memória de sua máquina você já pode parar aqui.
-
defina o argumento
comment.char = ""
se não há linhas comentadas em seu arquivo de dados. -
Use o argumento
colClasses
. Especificando as classes das variáveis torna o R até 2 vezes mais rápido na leitura. -
defina o número de linhas no arquivo texto. No linux você pode usar o comando
wc -l arquivo
para determinar o seu número de linhas.
Quando se trabalha com dados enormes as informações sobre seu sistema operacional são fundamentais:
-
quantidade de memória disponível e aplicações em uso
$ htop
-
usuários logados no mesmo sistema
$ last
-
sistema operacional (SO), 32 ou 64 bit?
data.frame(Sys.info())
Sys.info..
sysname Linux
release 4.4.0-119-generic
version #143~14.04.1-Ubuntu SMP Mon Apr 2 18:04:36 UTC 2018
nodename hidrosferica
machine x86_64
login unknown
user hidrometeorologista
effective_user hidrometeorologista
É possível estimar a memória necessária para leitura de dados. Suponha um conjunto de dados de 1500000 linhas e 120 colunas, todas colunas são da classe numeric
. Aproximadamente quanta memória é necessária para armazená-lo em um dataframe? Vamos assumir que os dados sejam numéricos não inteiros (8 bytes/registro).
- 1500000 x 120 x 8 bytes/registro = 1440000000 bytes = 1440000000/(2^20^) bytes/MB = 1373.29 MB = 1,34 GB
# cálculo de memória
bytes_per_reg <- 8
nlins <- 1500000
ncols <- 120
res <- nlins * ncols * bytes_per_reg
res/(2^20) # bytes/MB
#> [1] 1373.291
res/(2^20)/1000 # GB
#> [1] 1.373291
Para mais informações sobre a função read.table()
consulte o help da função ?read.table
.
Se seus dados estão disponíveis em uma planilha do Excel ou similar, você pode exportá-lo para o formato csv (comma separated value) via <salvar como>
.
Se você possui uma grande quantidade de arquivos no formato Excel, considere o post Read Excel files from R do Rbloogers para referência.
Vários softwares armazenam dados no formato binário. Os arquivos no formato binário são frequentemente menores que os de formato texto. Em contrapartida, a legibilidade humana dos dados é menor em comparação ao formato texto ASCII.
Em situações que os dados brutos exigem um processamento de dados significativo salvar os dados em formato binário próprio do R torna-se uma alternativa prática para análise posterior dos dados.
Para mostrar como usar as funções save()
e load()
vamos utilizar os dados pluviométricos lidos anteriormente e selecionar as colunas de interesse. Depois disso o objeto chuva_df
será armazenado em arquivo binário do R com a extensão .RData
.
# primeiras linhas
head(dprec[, 1:10])
#> EstacaoCodigo NivelConsistencia Data TipoMedicaoChuvas Maxima
#> 1 3054002 1 01/01/1934 1 NA
#> 2 3054002 1 01/02/1934 1 66.3
#> 3 3054002 1 01/03/1934 1 55.0
#> 4 3054002 1 01/04/1934 1 54.5
#> 5 3054002 1 01/05/1934 1 30.5
#> 6 3054002 1 01/06/1934 1 42.5
#> Total DiaMaxima NumDiasDeChuva MaximaStatus TotalStatus
#> 1 NA NA NA 0 0
#> 2 174.7 6 10 1 1
#> 3 160.7 9 10 1 1
#> 4 98.4 1 4 1 1
#> 5 119.4 29 8 1 1
#> 6 191.6 13 11 1 1
# selecionando somente dados diarios do dia 1 a 31 de cada ano
chuva_df <- dprec[, c(3, 14:44)]
# arquivo binario do R
save(chuva_df, file = "data/chuva_df.RData")
# verificando se arquivo foi salvo no diretório
file.exists("data/chuva_df.RData")
#> [1] TRUE
Como o objeto chuva_df
foi salvo em um arquivo, vamos removê-lo e então recuperá-lo carregando os dados armazenado no arquivo chuva_df.RData
.
# apagando chuva_df do ambiente de trabalho
rm(chuva_df)
# verifica existência de objeto
exists(chuva_df)
#> Error in exists(chuva_df): object 'chuva_df' not found
# carregando chuva_df
load(file = "data/chuva_df.RData")
ls()
#> [1] "airquality" "aq" "bytes_per_reg" "cab"
#> [5] "cf" "chuva_df" "cubo" "dados"
#> [9] "dprec" "dprec2" "fcubo" "k"
#> [13] "link" "ncols" "nlins" "pcks"
#> [17] "precip" "qlinha" "res" "sentenca"
#> [21] "soi" "soi_df" "soi.df" "soi_v"
#> [25] "tc" "texto" "v1" "vetor_aq"
#> [29] "vnames" "x" "x1" "x2"
#> [33] "y"
# para carregar os dados e saber o nome com que foram salvos
print(load(file = "data/chuva_df.RData"))
#> [1] "chuva_df"
head(chuva_df[, 1:10])
#> Data Chuva01 Chuva02 Chuva03 Chuva04 Chuva05 Chuva06 Chuva07
#> 1 01/01/1934 NA NA NA NA 10.5 3.0 11.1
#> 2 01/02/1934 15.5 3.5 0.0 0.0 11.9 66.3 1.0
#> 3 01/03/1934 0.0 0.0 0.0 0.0 0.0 0.0 0.0
#> 4 01/04/1934 54.5 0.0 0.0 0.0 0.0 18.5 0.0
#> 5 01/05/1934 0.0 19.0 26.7 0.0 3.2 4.2 0.0
#> 6 01/06/1934 0.0 0.0 21.5 12.7 8.7 0.0 0.0
#> Chuva08 Chuva09
#> 1 0.0 0
#> 2 40.0 0
#> 3 0.0 55
#> 4 19.5 0
#> 5 0.0 0
#> 6 0.0 0
Um vantagem desse formato é que os objetos criados podem ser lidos pelo R independente do sistema operacional e da arquitetura do computador, tornando muito prático o acesso aos dados.
Cada vez que uma sessão do R é finalizada, uma janela surge perguntando se deseja salvar o espaço de trabalho (save the workspace image
), que nada mais é do que um arquivo binário chamado .RData
no diretório de trabalho. Assim quando iniciar a sessão se o arquivo .RData
estiver no diretório de trabalho ele será automaticamente carregado tornando todos os objetos da última sessão disponíveis novamente.
Se você deseja salvar o espaço de trabalho em outro momento use a função save.image()
.
Quando desejamos salvar só uma parte dos dados uma opção é usar a função rm()
(uma abreviação de remove) para remover objetos que não são de interesse antes de finalizar a sessão do R. A função save()
permite salvar mais de um objeto em um mesmo arquivo.
save(cab, chuva_df, file = "data/dados_prec.RData")
ls()
#> [1] "airquality" "aq" "bytes_per_reg" "cab"
#> [5] "cf" "chuva_df" "cubo" "dados"
#> [9] "dprec" "dprec2" "fcubo" "k"
#> [13] "link" "ncols" "nlins" "pcks"
#> [17] "precip" "qlinha" "res" "sentenca"
#> [21] "soi" "soi_df" "soi.df" "soi_v"
#> [25] "tc" "texto" "v1" "vetor_aq"
#> [29] "vnames" "x" "x1" "x2"
#> [33] "y"
rm(cab, chuva_df)
ls()
#> [1] "airquality" "aq" "bytes_per_reg" "cf"
#> [5] "cubo" "dados" "dprec" "dprec2"
#> [9] "fcubo" "k" "link" "ncols"
#> [13] "nlins" "pcks" "precip" "qlinha"
#> [17] "res" "sentenca" "soi" "soi_df"
#> [21] "soi.df" "soi_v" "tc" "texto"
#> [25] "v1" "vetor_aq" "vnames" "x"
#> [29] "x1" "x2" "y"
# carrega e imprime na tela nome dos dados carregados
print(load("data/dados_prec.RData"))
#> [1] "cab" "chuva_df"
As funções readRDS()
e writeRDS()
são similares a load()
e save()
, respectivamente, exceto que elas lidam com um único objeto. Em contrapartida elas possuem a flexibilidade nomear o objeto lido com um nome diferente do qual ele foi salvo.
Vamos alterar o formato da data do dataframe chuva_df
e salvá-lo no arquivo chuva_df.rds
.
# salvar dados em um arquivo rds
head(chuva_df[, 1:10])
#> Data Chuva01 Chuva02 Chuva03 Chuva04 Chuva05 Chuva06 Chuva07
#> 1 01/01/1934 NA NA NA NA 10.5 3.0 11.1
#> 2 01/02/1934 15.5 3.5 0.0 0.0 11.9 66.3 1.0
#> 3 01/03/1934 0.0 0.0 0.0 0.0 0.0 0.0 0.0
#> 4 01/04/1934 54.5 0.0 0.0 0.0 0.0 18.5 0.0
#> 5 01/05/1934 0.0 19.0 26.7 0.0 3.2 4.2 0.0
#> 6 01/06/1934 0.0 0.0 21.5 12.7 8.7 0.0 0.0
#> Chuva08 Chuva09
#> 1 0.0 0
#> 2 40.0 0
#> 3 0.0 55
#> 4 19.5 0
#> 5 0.0 0
#> 6 0.0 0
# alterando formato de datas da coluna Data
chuva_df$Data <- as.Date(x = chuva_df$Data, format = "%d/%m/%Y")
saveRDS(object = chuva_df, file = "data/chuva_df.rds")
file.exists("data/chuva_df.rds")
#> [1] TRUE
Após salvar o dataframe chuva_df
vamos removê-lo do ambiente da sessão e recuperá-lo com a função readRDS()
.
# removendo chuva_df do ambiente
rm(chuva_df)
# recuperando dados do arquivo em uma variável com nome diferente do original
prec_ana <- readRDS("data/chuva_df.rds")
head(prec_ana[, 1:10])
#> Data Chuva01 Chuva02 Chuva03 Chuva04 Chuva05 Chuva06 Chuva07
#> 1 1934-01-01 NA NA NA NA 10.5 3.0 11.1
#> 2 1934-02-01 15.5 3.5 0.0 0.0 11.9 66.3 1.0
#> 3 1934-03-01 0.0 0.0 0.0 0.0 0.0 0.0 0.0
#> 4 1934-04-01 54.5 0.0 0.0 0.0 0.0 18.5 0.0
#> 5 1934-05-01 0.0 19.0 26.7 0.0 3.2 4.2 0.0
#> 6 1934-06-01 0.0 0.0 21.5 12.7 8.7 0.0 0.0
#> Chuva08 Chuva09
#> 1 0.0 0
#> 2 40.0 0
#> 3 0.0 55
#> 4 19.5 0
#> 5 0.0 0
#> 6 0.0 0
Arquivos binários do TRMM
Download do arquivo binário com estimativa da precipitação pelo satélite TRMM. O produto 3B42 possui resolução espacial de 0.25º, cobertura espacial global e temporal de 3 horas.
# ftp com aruivos binários de estimativa de precipitação a cada 3 h do TRMM 3B42
ftp_trmm_file <- "ftp://disc2.nascom.nasa.gov/data/TRMM/Gridded/3B42_V7/201407/3B42.140701.09z.7.precipitation.bin"
# download do arquivo
download.file(ftp_trmm_file, destfile = file.path("data",basename(ftp_trmm_file)))
# leitura do link para o arquivo readme
readme <- readLines("ftp://disc2.nascom.nasa.gov/data/TRMM/Gridded/3B42_V7/readme")
# escrevendo readme em arquivo texto
writeLines(text = readme, con = "data/readme_TRMM.txt")
# abrindo arquivo para visualização
file.show("readme_TRMM.txt")
Leitura do arquivo binário.
# importando arquivo binário
bin_data <- readBin(con = file.path("data",basename(ftp_trmm_file)),
what = "numeric",
endian = "big",
size = 4,
n = 1440*400)
#> [1] TRUE
#> num [1:400, 1:1440] 0 0 0 0 0 0 0 0 0 0 ...
Para visualizarmos os dados lidos, vamos usar a função levelplot()
do pacote lattice. Essa função permite rapidamente visualizar o campo espacial da precipitação. As cores que devem ser usados para colorir os níveis de variação da precipitação. Vamos remover os dados abaixo de 0.5 mm/h para destacar os sistemas precipitantes.
# Visualização dos dados
# install.packages(lattice, dep = TRUE)
require(lattice)
# definindo paleta de cores para o gráfico
paleta <- rev(topo.colors(32)) # rev() inverte a ordem do vetor
levelplot(t(m),
col.regions = rev(terrain.colors(32)),
xlab = "x",
ylab = "y")
# para melhor visualização vamos substituir valores abaixo de 0.1 mm/dia por NA
m[m < 0.5] <- NA
# gráfico com valores apenas onde choveu
levelplot(t(m),
col.regions = paleta,
xlab = "x",
ylab = "y")
NetCDF é formato binário, auto-descritivo e independente do SO, para criar e distribuir arrays multidimensionais de dados gradeados. Originalmente foi desenvolvido para o armazenamento e distribuição de dos climáticos, tais como os gerados por modelos climáticos e sistemas de assimilação de dados como as reanálises.
As bibliotecas NetCDF são mantidas pelo Unidata. Dados no formato NetCDF são acessíveis no R pelos pacotes ncdf, ncdf4 e raster. Esses pacotes fornecem o suporte necessário para leitura e escrita de arquivos NetCDF. O pacote ncdf
é disponível para Linux e Mac OS X, mas suporta somente arquivo no formato NetCDF 3, enquanto o pacote ncdf4
lê arquivos no formato NetCDF 3 e 4, porém é disponível apenas para sistemas Linux.
Para utilizar os pacotes ncdf*
é necessário instalar o pacote linux netcdf-bin
.
apt-get install netcdf-bin
Os exemplos a seguir usam o pacote ncdf4 para ler arquivo NetCDF com dados climáticos do Climate Research Unit CRU, consistindo de valores médios de longo prazo (1961-1990) da temperatura do ar próximo à superfície com resolução espacial de 0,5 º na área continental. As dimensões da array são: 720 (longitudes) x 360 (latitudes) x 12 (meses).
Carregando pacotes necessários:
# Se não tiver o pacote instale-o, p.ex.:
# install.packages("ncdf4", dep = TRUE)
# depois carregamos os pacotes
library(chron)
library(RColorBrewer)
library(lattice)
library(ncdf4)
library(fields)
Abrindo arquivo NetCDF e obtendo informações básicas.
# nome do arquivo netcdf
ncname <- "data/cru10min30_tmp"
ncfname <- paste(ncname, ".nc", sep = "")
# variável de interesse, tmp: temperatura do ar
dname <- "tmp"
# abre o arquivo NetCDF
ncin <- nc_open(ncfname)
print(ncin)
#> File data/cru10min30_tmp.nc (NC_FORMAT_CLASSIC):
#>
#> 2 variables (excluding dimension variables):
#> float climatology_bounds[nv,time]
#> float tmp[lon,lat,time]
#> long_name: air_temperature
#> units: degC
#> _FillValue: -99
#> source: E:\Projects\cru\data\cru_cl_2.0\nc_files\cru10min_tmp.nc
#>
#> 4 dimensions:
#> lon Size:720
#> standard_name: longitude
#> long_name: longitude
#> units: degrees_east
#> axis: X
#> lat Size:360
#> standard_name: latitude
#> long_name: latitude
#> units: degrees_north
#> axis: Y
#> time Size:12
#> standard_name: time
#> long_name: time
#> units: days since 1900-01-01 00:00:00.0 -0:00
#> axis: T
#> calendar: standard
#> climatology: climatology_bounds
#> nv Size:2
#>
#> 7 global attributes:
#> data: CRU CL 2.0 1961-1990 Monthly Averages
#> title: CRU CL 2.0 -- 10min grid sampled every 0.5 degree
#> institution: http://www.cru.uea.ac.uk/
#> source: http://www.cru.uea.ac.uk/~markn/cru05/cru05_intro.html
#> references: New et al. (2002) Climate Res 21:1-25
#> history: P.J. Bartlein, 19 Jun 2005
#> Conventions: CF-1.0
# estrutura dos dados
str(ncin)
#> List of 14
#> $ filename : chr "data/cru10min30_tmp.nc"
#> $ writable : logi FALSE
#> $ id : int 65536
#> $ safemode : logi FALSE
#> $ format : chr "NC_FORMAT_CLASSIC"
#> $ is_GMT : logi FALSE
#> $ groups :List of 1
#> ..$ :List of 7
#> .. ..$ id : int 65536
#> .. ..$ name : chr ""
#> .. ..$ ndims: int 4
#> .. ..$ nvars: int 5
#> .. ..$ natts: int 7
#> .. ..$ dimid: int [1:4(1d)] 0 1 2 3
#> .. ..$ fqgn : chr ""
#> .. ..- attr(*, "class")= chr "ncgroup4"
#> $ fqgn2Rindex:List of 1
#> ..$ : int 1
#> $ ndims : num 4
#> $ natts : num 7
#> $ dim :List of 4
#> ..$ lon :List of 10
#> .. ..$ name : chr "lon"
#> .. ..$ len : int 720
#> .. ..$ unlim : logi FALSE
#> .. ..$ group_index : int 1
#> .. ..$ group_id : int 65536
#> .. ..$ id : int 0
#> .. ..$ dimvarid :List of 5
#> .. .. ..$ id : int 0
#> .. .. ..$ group_index: int 1
#> .. .. ..$ group_id : int 65536
#> .. .. ..$ list_index : num -1
#> .. .. ..$ isdimvar : logi TRUE
#> .. .. ..- attr(*, "class")= chr "ncid4"
#> .. ..$ units : chr "degrees_east"
#> .. ..$ vals : num [1:720(1d)] -180 -179 -179 -178 -178 ...
#> .. ..$ create_dimvar: logi TRUE
#> .. ..- attr(*, "class")= chr "ncdim4"
#> ..$ lat :List of 10
#> .. ..$ name : chr "lat"
#> .. ..$ len : int 360
#> .. ..$ unlim : logi FALSE
#> .. ..$ group_index : int 1
#> .. ..$ group_id : int 65536
#> .. ..$ id : int 1
#> .. ..$ dimvarid :List of 5
#> .. .. ..$ id : int 1
#> .. .. ..$ group_index: int 1
#> .. .. ..$ group_id : int 65536
#> .. .. ..$ list_index : num -1
#> .. .. ..$ isdimvar : logi TRUE
#> .. .. ..- attr(*, "class")= chr "ncid4"
#> .. ..$ units : chr "degrees_north"
#> .. ..$ vals : num [1:360(1d)] -89.8 -89.2 -88.8 -88.2 -87.8 ...
#> .. ..$ create_dimvar: logi TRUE
#> .. ..- attr(*, "class")= chr "ncdim4"
#> ..$ time:List of 11
#> .. ..$ name : chr "time"
#> .. ..$ len : int 12
#> .. ..$ unlim : logi FALSE
#> .. ..$ group_index : int 1
#> .. ..$ group_id : int 65536
#> .. ..$ id : int 2
#> .. ..$ dimvarid :List of 5
#> .. .. ..$ id : int 2
#> .. .. ..$ group_index: int 1
#> .. .. ..$ group_id : int 65536
#> .. .. ..$ list_index : num -1
#> .. .. ..$ isdimvar : logi TRUE
#> .. .. ..- attr(*, "class")= chr "ncid4"
#> .. ..$ units : chr "days since 1900-01-01 00:00:00.0 -0:00"
#> .. ..$ calendar : chr "standard"
#> .. ..$ vals : num [1:12(1d)] 27774 27804 27834 27864 27894 ...
#> .. ..$ create_dimvar: logi TRUE
#> .. ..- attr(*, "class")= chr "ncdim4"
#> ..$ nv :List of 10
#> .. ..$ name : chr "nv"
#> .. ..$ len : int 2
#> .. ..$ unlim : logi FALSE
#> .. ..$ group_index : int 1
#> .. ..$ group_id : int 65536
#> .. ..$ id : int 3
#> .. ..$ dimvarid :List of 5
#> .. .. ..$ id : int -1
#> .. .. ..$ group_index: int 1
#> .. .. ..$ group_id : int 65536
#> .. .. ..$ list_index : num -1
#> .. .. ..$ isdimvar : logi TRUE
#> .. .. ..- attr(*, "class")= chr "ncid4"
#> .. ..$ vals : int [1:2] 1 2
#> .. ..$ units : chr ""
#> .. ..$ create_dimvar: logi FALSE
#> .. ..- attr(*, "class")= chr "ncdim4"
#> $ unlimdimid : num -1
#> $ nvars : num 2
#> $ var :List of 2
#> ..$ climatology_bounds:List of 22
#> .. ..$ id :List of 5
#> .. .. ..$ id : num 3
#> .. .. ..$ group_index: num -1
#> .. .. ..$ group_id : int 65536
#> .. .. ..$ list_index : num 1
#> .. .. ..$ isdimvar : logi FALSE
#> .. .. ..- attr(*, "class")= chr "ncid4"
#> .. ..$ name : chr "climatology_bounds"
#> .. ..$ ndims : int 2
#> .. ..$ natts : int 0
#> .. ..$ size : int [1:2] 2 12
#> .. ..$ dimids : int [1:2] 3 2
#> .. ..$ prec : chr "float"
#> .. ..$ units : chr ""
#> .. ..$ longname : chr "climatology_bounds"
#> .. ..$ group_index : int 1
#> .. ..$ chunksizes : logi NA
#> .. ..$ storage : num 1
#> .. ..$ shuffle : logi FALSE
#> .. ..$ compression : logi NA
#> .. ..$ dims : list()
#> .. ..$ dim :List of 2
#> .. .. ..$ :List of 10
#> .. .. .. ..$ name : chr "nv"
#> .. .. .. ..$ len : int 2
#> .. .. .. ..$ unlim : logi FALSE
#> .. .. .. ..$ group_index : int 1
#> .. .. .. ..$ group_id : int 65536
#> .. .. .. ..$ id : int 3
#> .. .. .. ..$ dimvarid :List of 5
#> .. .. .. .. ..$ id : int -1
#> .. .. .. .. ..$ group_index: int 1
#> .. .. .. .. ..$ group_id : int 65536
#> .. .. .. .. ..$ list_index : num -1
#> .. .. .. .. ..$ isdimvar : logi TRUE
#> .. .. .. .. ..- attr(*, "class")= chr "ncid4"
#> .. .. .. ..$ vals : int [1:2] 1 2
#> .. .. .. ..$ units : chr ""
#> .. .. .. ..$ create_dimvar: logi FALSE
#> .. .. .. ..- attr(*, "class")= chr "ncdim4"
#> .. .. ..$ :List of 11
#> .. .. .. ..$ name : chr "time"
#> .. .. .. ..$ len : int 12
#> .. .. .. ..$ unlim : logi FALSE
#> .. .. .. ..$ group_index : int 1
#> .. .. .. ..$ group_id : int 65536
#> .. .. .. ..$ id : int 2
#> .. .. .. ..$ dimvarid :List of 5
#> .. .. .. .. ..$ id : int 2
#> .. .. .. .. ..$ group_index: int 1
#> .. .. .. .. ..$ group_id : int 65536
#> .. .. .. .. ..$ list_index : num -1
#> .. .. .. .. ..$ isdimvar : logi TRUE
#> .. .. .. .. ..- attr(*, "class")= chr "ncid4"
#> .. .. .. ..$ units : chr "days since 1900-01-01 00:00:00.0 -0:00"
#> .. .. .. ..$ calendar : chr "standard"
#> .. .. .. ..$ vals : num [1:12(1d)] 27774 27804 27834 27864 27894 ...
#> .. .. .. ..$ create_dimvar: logi TRUE
#> .. .. .. ..- attr(*, "class")= chr "ncdim4"
#> .. ..$ varsize : int [1:2] 2 12
#> .. ..$ unlim : logi FALSE
#> .. ..$ make_missing_value: logi FALSE
#> .. ..$ missval : num 1e+30
#> .. ..$ hasAddOffset : logi FALSE
#> .. ..$ hasScaleFact : logi FALSE
#> .. ..- attr(*, "class")= chr "ncvar4"
#> ..$ tmp :List of 22
#> .. ..$ id :List of 5
#> .. .. ..$ id : num 4
#> .. .. ..$ group_index: num -1
#> .. .. ..$ group_id : int 65536
#> .. .. ..$ list_index : num 2
#> .. .. ..$ isdimvar : logi FALSE
#> .. .. ..- attr(*, "class")= chr "ncid4"
#> .. ..$ name : chr "tmp"
#> .. ..$ ndims : int 3
#> .. ..$ natts : int 4
#> .. ..$ size : int [1:3] 720 360 12
#> .. ..$ dimids : int [1:3] 0 1 2
#> .. ..$ prec : chr "float"
#> .. ..$ units : chr "degC"
#> .. ..$ longname : chr "air_temperature"
#> .. ..$ group_index : int 1
#> .. ..$ chunksizes : logi NA
#> .. ..$ storage : num 1
#> .. ..$ shuffle : logi FALSE
#> .. ..$ compression : logi NA
#> .. ..$ dims : list()
#> .. ..$ dim :List of 3
#> .. .. ..$ :List of 10
#> .. .. .. ..$ name : chr "lon"
#> .. .. .. ..$ len : int 720
#> .. .. .. ..$ unlim : logi FALSE
#> .. .. .. ..$ group_index : int 1
#> .. .. .. ..$ group_id : int 65536
#> .. .. .. ..$ id : int 0
#> .. .. .. ..$ dimvarid :List of 5
#> .. .. .. .. ..$ id : int 0
#> .. .. .. .. ..$ group_index: int 1
#> .. .. .. .. ..$ group_id : int 65536
#> .. .. .. .. ..$ list_index : num -1
#> .. .. .. .. ..$ isdimvar : logi TRUE
#> .. .. .. .. ..- attr(*, "class")= chr "ncid4"
#> .. .. .. ..$ units : chr "degrees_east"
#> .. .. .. ..$ vals : num [1:720(1d)] -180 -179 -179 -178 -178 ...
#> .. .. .. ..$ create_dimvar: logi TRUE
#> .. .. .. ..- attr(*, "class")= chr "ncdim4"
#> .. .. ..$ :List of 10
#> .. .. .. ..$ name : chr "lat"
#> .. .. .. ..$ len : int 360
#> .. .. .. ..$ unlim : logi FALSE
#> .. .. .. ..$ group_index : int 1
#> .. .. .. ..$ group_id : int 65536
#> .. .. .. ..$ id : int 1
#> .. .. .. ..$ dimvarid :List of 5
#> .. .. .. .. ..$ id : int 1
#> .. .. .. .. ..$ group_index: int 1
#> .. .. .. .. ..$ group_id : int 65536
#> .. .. .. .. ..$ list_index : num -1
#> .. .. .. .. ..$ isdimvar : logi TRUE
#> .. .. .. .. ..- attr(*, "class")= chr "ncid4"
#> .. .. .. ..$ units : chr "degrees_north"
#> .. .. .. ..$ vals : num [1:360(1d)] -89.8 -89.2 -88.8 -88.2 -87.8 ...
#> .. .. .. ..$ create_dimvar: logi TRUE
#> .. .. .. ..- attr(*, "class")= chr "ncdim4"
#> .. .. ..$ :List of 11
#> .. .. .. ..$ name : chr "time"
#> .. .. .. ..$ len : int 12
#> .. .. .. ..$ unlim : logi FALSE
#> .. .. .. ..$ group_index : int 1
#> .. .. .. ..$ group_id : int 65536
#> .. .. .. ..$ id : int 2
#> .. .. .. ..$ dimvarid :List of 5
#> .. .. .. .. ..$ id : int 2
#> .. .. .. .. ..$ group_index: int 1
#> .. .. .. .. ..$ group_id : int 65536
#> .. .. .. .. ..$ list_index : num -1
#> .. .. .. .. ..$ isdimvar : logi TRUE
#> .. .. .. .. ..- attr(*, "class")= chr "ncid4"
#> .. .. .. ..$ units : chr "days since 1900-01-01 00:00:00.0 -0:00"
#> .. .. .. ..$ calendar : chr "standard"
#> .. .. .. ..$ vals : num [1:12(1d)] 27774 27804 27834 27864 27894 ...
#> .. .. .. ..$ create_dimvar: logi TRUE
#> .. .. .. ..- attr(*, "class")= chr "ncdim4"
#> .. ..$ varsize : int [1:3] 720 360 12
#> .. ..$ unlim : logi FALSE
#> .. ..$ make_missing_value: logi TRUE
#> .. ..$ missval : num -99
#> .. ..$ hasAddOffset : logi FALSE
#> .. ..$ hasScaleFact : logi FALSE
#> .. ..- attr(*, "class")= chr "ncvar4"
#> - attr(*, "class")= chr "ncdf4"
# classe
class(ncin)
#> [1] "ncdf4"
# modo
mode(ncin)
#> [1] "list"
Agora, vamos ler as coordenadas de longitude e latitude.
lon <- ncvar_get(ncin, "lon")
nlon <- dim(lon)
head(lon)
#> [1] -179.75 -179.25 -178.75 -178.25 -177.75 -177.25
lat <- ncvar_get(ncin, "lat", verbose = FALSE)
nlat <- dim(lat)
head(lat)
#> [1] -89.75 -89.25 -88.75 -88.25 -87.75 -87.25
c(nlon, nlat)
#> [1] 720 360
Vamos obter a variável temporal e seus atributos usando as funções ncvarget()
e ncatt_get
. Depois fechamos o acesso ao arquivo NetCDF.
t <- ncvar_get(ncin, "time")
(tunits <- ncatt_get(ncin, "time", "units"))
#> $hasatt
#> [1] TRUE
#>
#> $value
#> [1] "days since 1900-01-01 00:00:00.0 -0:00"
(nt <- dim(t))
#> [1] 12
tmp.array <- ncvar_get(ncin, dname)
# resumo da estrutura dos dados
str(tmp.array)
#> num [1:720, 1:360, 1:12] NA NA NA NA NA NA NA NA NA NA ...
# nome longo da variável
(dlname <- ncatt_get(ncin, dname, "long_name"))
#> $hasatt
#> [1] TRUE
#>
#> $value
#> [1] "air_temperature"
# unidades da variável
(dunits <- ncatt_get(ncin, dname, "units"))
#> $hasatt
#> [1] TRUE
#>
#> $value
#> [1] "degC"
# valor definido para valores faltantes
(fillvalue <- ncatt_get(ncin, dname, "_FillValue"))
#> $hasatt
#> [1] TRUE
#>
#> $value
#> [1] -99
# fechando arquivo
nc_close(ncin)
As variáveis do arquivo NetCDF são lidas e escritas como vetores (p.ex.: longitudes), arrays bidimensionais (matrizes, campo espacial de um momento), ou arrays multidimensionais (campos espaciais de uma variável em diversos tempos).
Vamos extrair o campo espacial de um passo de tempo (1 dia), criar um dataframe onde cada linha será um ponto de grade e a coluna representa uma variável, por exemplo: longitude, latitude e temperatura. Finalmente vamos exportar o dataframe para um arquivo csv
.
m <- 1
# campo espacial do primeiro dia de dados
tmp.slice <- tmp.array[, , m]
str(tmp.slice)
#> num [1:720, 1:360] NA NA NA NA NA NA NA NA NA NA ...
# outra função para visualizar dados com 3D
image.plot(lon, lat, tmp.slice, col = rev(brewer.pal(10, "RdBu")))
Há funções no R que permitem importar dados diretamente de diversos softwares, inclusive de planilhas eletrônicas. O pacote foreign
(estrangeiro em português) oferece diversas funções para importação dados de outros programas. Para verificar as funções disponíveis confira os comandos abaixo.
# install.packages("foreign")
require(foreign)
library(help = foreign)
ls(name = "package:foreign", pattern = "^[rea|wri]")
#> [1] "read.arff" "read.dbf" "read.dta" "read.epiinfo"
#> [5] "read.mtp" "read.octave" "read.S" "read.spss"
#> [9] "read.ssd" "read.systat" "read.xport" "write.arff"
#> [13] "write.dbf" "write.dta" "write.foreign"
A função read.dbf()
lê arquivos no formato típico de softwares de manipulação de banco de dados, como por exemplo o Microsoft Access.
O pacote R.matlab
fornece a função read.matlab()
para leitura de dados no formato Matlab.
O armazenamento de dados em formato Excel (arquivos com extensões .xls
e .xlsx
) é uma prática muito popular. Mas infelizmente ler dados Excel não é tão simples, especialmente fora do ambiente Windows, apesar da variedade de pacotes disponíveis para tal tarefa.
Há uma razoável variedade de pacotes para resolver esse problema: gdata, XLConnect e readxl e outros. mas todos tem alguma dependência, tal como, Java, Perl ou R 32 bit, que são geralmente inviáveis.
Assim é bem provável que você terá que testar diferentes pacotes e as suas dependências para encontrar uma ferramenta que adeque a sua escolha de SO e tipo de arquivo Excel (xls
ou xlsx
).
A solução mais usada é converter as planilhas Excel para csv
usando algum programa.
Aqui vamos mostrar como usar o pacote readxl para leitura de arquivos Excel, em ambos formatos xls
e xlsx
; com uma ou mais planilhas.
# install.packages("readxl")
library(readxl)
inmet_estacoes <- read_excel(
path = "data/Estações Normal Climatoógica 1981-2010.xls",
col_names = TRUE,
skip = 3)
inmet_estacoes
#> # A tibble: 437 x 10
#> Nº Código `Nome da Estação` UF Latitude Longitude Atitude
#> <dbl> <dbl> <chr> <chr> <dbl> <dbl> <dbl>
#> 1 1. 82704. CRUZEIRO DO SUL AC -7.60 -72.7 170.
#> 2 2. 82915. RIO BRANCO AC -9.95 -67.9 160.
#> 3 3. 82807. TARAUACA AC -8.17 -70.8 190.
#> 4 4. 82989. AGUA BRANCA AL -9.28 -37.9 605.
#> 5 5. 82995. ARAPIRACA AL -9.73 -36.8 247.
#> 6 6. 82994. MACEIO AL -9.67 -35.7 64.5
#> 7 7. 82991. MAJOR ISIDORO AL -9.55 -37.0 200.
#> 8 8. 82988. MATA GRANDE AL -9.12 -37.7 635.
#> 9 9. 82992. PALMEIRA DOS INDIOS AL -9.45 -36.7 275.
#> 10 10. 82990. PAO DE ACUCAR AL -9.75 -37.4 19.1
#> # ... with 427 more rows, and 3 more variables: `Inicio Operação` <chr>,
#> # `Fim Operação` <dttm>, Situação <chr>
str(inmet_estacoes)
#> Classes 'tbl_df', 'tbl' and 'data.frame': 437 obs. of 10 variables:
#> $ Nº : num 1 2 3 4 5 6 7 8 9 10 ...
#> $ Código : num 82704 82915 82807 82989 82995 ...
#> $ Nome da Estação: chr "CRUZEIRO DO SUL" "RIO BRANCO" "TARAUACA" "AGUA BRANCA" ...
#> $ UF : chr "AC" "AC" "AC" "AL" ...
#> $ Latitude : num -7.6 -9.95 -8.17 -9.28 -9.73 ...
#> $ Longitude : num -72.7 -67.9 -70.8 -37.9 -36.8 ...
#> $ Atitude : num 170 160 190 605 247 ...
#> $ Inicio Operação: chr "10228" "10594" "24264" "10353" ...
#> $ Fim Operação : POSIXct, format: "2016-02-01" NA ...
#> $ Situação : chr "Desativada" NA NA NA ...
class(inmet_estacoes)
#> [1] "tbl_df" "tbl" "data.frame"
Os dados lidos são armazenados em um dataframe. É possível informar um intervalo células e a planilha através dos argumentos range
e sheet
. Veja o ?readxl
para mais detalhes.
Nos dados importados acima, a variável Início Operação
não veio formatada corretamente como data.
Você pode especificar a classe de cada variável do conjunto de dados.
inmet_estacoes <- read_excel(
path = "data/Estações Normal Climatoógica 1981-2010.xls",
col_names = TRUE,
col_types = c("numeric", "numeric", "text", "text", "numeric", "numeric", "numeric", "date", "date", "text"),
skip = 3)
#> Warning in read_fun(path = path, sheet_i = sheet, limits = limits, shim =
#> shim, : Expecting date in H82 / R82C8: got '1896/01/01'
#View(inmet_estacoes)
str(inmet_estacoes)
#> Classes 'tbl_df', 'tbl' and 'data.frame': 437 obs. of 10 variables:
#> $ Nº : num 1 2 3 4 5 6 7 8 9 10 ...
#> $ Código : num 82704 82915 82807 82989 82995 ...
#> $ Nome da Estação: chr "CRUZEIRO DO SUL" "RIO BRANCO" "TARAUACA" "AGUA BRANCA" ...
#> $ UF : chr "AC" "AC" "AC" "AL" ...
#> $ Latitude : num -7.6 -9.95 -8.17 -9.28 -9.73 ...
#> $ Longitude : num -72.7 -67.9 -70.8 -37.9 -36.8 ...
#> $ Atitude : num 170 160 190 605 247 ...
#> $ Inicio Operação: POSIXct, format: "1928-01-01" "1929-01-01" ...
#> $ Fim Operação : POSIXct, format: "2016-02-01" NA ...
#> $ Situação : chr "Desativada" NA NA NA ...
Para escrever um arquivo xls
ou xlsx você pode usar a função writeWorksheet()
do pacote XLConnect. Entretanto, você pode escrever o arquivo em CSV (com write.csv()
), um format mais universal e acessível para qualquer usuário.
Quando dados precisam ser acessados por muitas pessoas, a melhor opção é armazená-los em Banco de Dados Relacional, BDR. Existem diversos Sistemas Gerenciadores de Banco de Dados Relacional (SGBDR) (do inglês Relational database management system, RDBMS) que operam BDRs. O R pode conectar-se a diversos SGBDR e ler os dados de um BDR.
O pacote DBI (Database Interface) fornece uma sintaxe unificada para acessar diversos SGBDR, como: SQLite, MySQL, PostgreSQL e Oracle entre outros. Dependendo do tipo de banco de dados é necessário baixar o pacote específico para ser usado com o pacote DBI
. Esses pacotes formam a interface com os SGBDR. Para o MySQL há o pacote RMySQL, para o SQLite há o pacote RSQLite, e assim por diante.
Após carregar o pacote apropriado podemos usar as funções do DBI
para acessar o banco de dados. Para mostrar como ler um BDR, usaremos um banco de dados SQLite gentilmente cedido pelo GRUMA-UFSM. O BDR contém informações sobre o rastreamento de Sistemas Convectivos de Mesoescala (SCMs) na região Sul do Brasil para o ano de 2005.
Para conexão com o banco de dados SQLite, primeiro precisamos instalar e carregar o pacote DBI
e o pacote RSQLite
.
#install.packages("DBI", dep = TRUE)
library(DBI)
#install.packages("RSQLite", dep = TRUE)
library(RSQLite)
A seguir, definimos o driver do banco de dados como SQLite e configuramos a conexão ao banco de dados, nesse caso definindo uma variável com o nome do arquivo (db_file
).
# nome do SGBDR
driver <- dbDriver("SQLite")
# nome do arquivo com banco de dados
db_file <- "data/rastreador1.db3"
# conectando com o BDR
conn <- dbConnect(driver, db_file)
conn
#> <SQLiteConnection>
#> Path: /home/hidrometeorologista/Dropbox/ufsm/ensino/_1-semestre-2018/analise-dados-amb-r/adar-ufsm/data/rastreador1.db3
#> Extensions: TRUE
A função dbListTables()
extrai o nome das tabelas contidas no banco de dados conectado através do objeto conn
.
tab_list <- dbListTables(conn)
tab_list
#> [1] "Nuvem" "imagem_nuvem" "imagens" "nuvem_formacao"
#> [5] "sqlite_sequence"
Com a função dbReadTable()
podemos ler uma tabela do banco de dados.
# lendo tabela imagem_nuvem
imagem_nuvem <- dbReadTable(conn, "imagem_nuvem")
head(imagem_nuvem)
#> id_imagem_nuvem id_imagem id_nuvem centroidX centroidY centroElipseX
#> 1 1 1 1 230 588 NA
#> 2 2 1 2 227 583 227.3679
#> 3 3 1 3 NA NA NA
#> 4 4 1 4 976 573 984.4849
#> 5 5 1 5 542 487 NA
#> 6 6 1 6 NA NA NA
#> centroElipseY anguloElipse eixoElipseX eixoElipseY area
#> 1 NA NA NA NA 80
#> 2 584.0366 266.5297 3.54245 8.876847 272
#> 3 NA NA NA NA NA
#> 4 574.8262 235.6567 38.15762 231.730133 24520
#> 5 NA NA NA NA 8
#> 6 NA NA NA NA NA
tail(imagem_nuvem)
#> id_imagem_nuvem id_imagem id_nuvem centroidX centroidY centroElipseX
#> 6849 6849 84 6696 NA NA NA
#> 6850 6850 84 6697 NA NA NA
#> 6851 6851 84 6698 NA NA NA
#> 6852 6852 84 6699 NA NA NA
#> 6853 6853 84 6700 376 237 375.2948
#> 6854 6854 84 6701 364 234 NA
#> centroElipseY anguloElipse eixoElipseX eixoElipseY area
#> 6849 NA NA NA NA NA
#> 6850 NA NA NA NA NA
#> 6851 NA NA NA NA NA
#> 6852 NA NA NA NA NA
#> 6853 237.4593 297.5074 2.457791 12.35366 280
#> 6854 NA NA NA NA 16
Para ler cada uma das tabela do banco e salvá-la com o mesmo nome usado no banco de dados podemos fazer um looping com a função for()
e usar a função assign()
para atribuir nomes as tabelas.
# lendo cada tabela do banco e criando um dataframe
# com mesmo nome da tabela dentro do banco de dados
for(i in tab_list) assign(i, dbReadTable(conn, i))
# verificando se as tabelas foram criadas
all(tab_list %in% ls())
#> [1] TRUE
Após a leitura das tabelas de interesse podemos desconectar o banco de dados e o driver.
# desconectando do banco
dbDisconnect(conn)
dbUnloadDriver(driver)
O trabalho com banco de dados exige experiência que vai além das habilidades de um típico usuário de R. Para os interessados nisso, um bom lugar para começar é baixar os pacotes citados e ler a documentação deles.
Arquivos Shapefiles do ArcGis
#install.packages("raster", dep = TRUE)
library(raster)
bacias <- shapefile("data/Ottobacias_Nivel2.shp")
class(bacias)
#> [1] "SpatialPolygonsDataFrame"
#> attr(,"package")
#> [1] "sp"
str(bacias)
#> Formal class 'SpatialPolygonsDataFrame' [package "sp"] with 5 slots
#> ..@ data :'data.frame': 39 obs. of 2 variables:
#> .. ..$ NUNIVOTTO2: chr [1:39] "39" "41" "42" "43" ...
#> .. ..$ VERSAO : chr [1:39] "2006/11/06" "2006/11/06" "2006/11/06" "2006/11/06" ...
#> ..@ polygons :List of 39
#> .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
#> .. .. .. ..@ Polygons :List of 1
#> .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
#> .. .. .. .. .. .. ..@ labpt : num [1:2] -52.15 2.89
#> .. .. .. .. .. .. ..@ area : num 11.1
#> .. .. .. .. .. .. ..@ hole : logi FALSE
#> .. .. .. .. .. .. ..@ ringDir: int 1
#> .. .. .. .. .. .. ..@ coords : num [1:2001, 1:2] -53.2 -53.1 -53.1 -53.1 -53 ...
#> .. .. .. ..@ plotOrder: int 1
#> .. .. .. ..@ labpt : num [1:2] -52.15 2.89
#> .. .. .. ..@ ID : chr "0"
#> .. .. .. ..@ area : num 11.1
#> .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
#> .. .. .. ..@ Polygons :List of 1
#> .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
#> .. .. .. .. .. .. ..@ labpt : num [1:2] -52.495 0.311
#> .. .. .. .. .. .. ..@ area : num 8.65
#> .. .. .. .. .. .. ..@ hole : logi FALSE
#> .. .. .. .. .. .. ..@ ringDir: int 1
#> .. .. .. .. .. .. ..@ coords : num [1:1700, 1:2] -53.2 -53.2 -53.2 -53.2 -53.1 ...
#> .. .. .. ..@ plotOrder: int 1
#> .. .. .. ..@ labpt : num [1:2] -52.495 0.311
#> .. .. .. ..@ ID : chr "1"
#> .. .. .. ..@ area : num 8.65
#> .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
#> .. .. .. ..@ Polygons :List of 1
#> .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
#> .. .. .. .. .. .. ..@ labpt : num [1:2] -53.09 -8.37
#> .. .. .. .. .. .. ..@ area : num 41.9
#> .. .. .. .. .. .. ..@ hole : logi FALSE
#> .. .. .. .. .. .. ..@ ringDir: int 1
#> .. .. .. .. .. .. ..@ coords : num [1:3706, 1:2] -50.4 -50.4 -50.4 -50.4 -50.4 ...
#> .. .. .. ..@ plotOrder: int 1
#> .. .. .. ..@ labpt : num [1:2] -53.09 -8.37
#> .. .. .. ..@ ID : chr "2"
#> .. .. .. ..@ area : num 41.9
#> .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
#> .. .. .. ..@ Polygons :List of 1
#> .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
#> .. .. .. .. .. .. ..@ labpt : num [1:2] -54.13 -1.37
#> .. .. .. .. .. .. ..@ area : num 9.27
#> .. .. .. .. .. .. ..@ hole : logi FALSE
#> .. .. .. .. .. .. ..@ ringDir: int 1
#> .. .. .. .. .. .. ..@ coords : num [1:1498, 1:2] -54.5 -54.5 -54.5 -54.5 -54.5 ...
#> .. .. .. ..@ plotOrder: int 1
#> .. .. .. ..@ labpt : num [1:2] -54.13 -1.37
#> .. .. .. ..@ ID : chr "3"
#> .. .. .. ..@ area : num 9.27
#> .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
#> .. .. .. ..@ Polygons :List of 1
#> .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
#> .. .. .. .. .. .. ..@ labpt : num [1:2] -56.9 -9.6
#> .. .. .. .. .. .. ..@ area : num 40.6
#> .. .. .. .. .. .. ..@ hole : logi FALSE
#> .. .. .. .. .. .. ..@ ringDir: int 1
#> .. .. .. .. .. .. ..@ coords : num [1:3750, 1:2] -55.2 -55.2 -55.2 -55.2 -55.2 ...
#> .. .. .. ..@ plotOrder: int 1
#> .. .. .. ..@ labpt : num [1:2] -56.9 -9.6
#> .. .. .. ..@ ID : chr "4"
#> .. .. .. ..@ area : num 40.6
#> .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
#> .. .. .. ..@ Polygons :List of 1
#> .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
#> .. .. .. .. .. .. ..@ labpt : num [1:2] -57.52 -1.47
#> .. .. .. .. .. .. ..@ area : num 29.8
#> .. .. .. .. .. .. ..@ hole : logi FALSE
#> .. .. .. .. .. .. ..@ ringDir: int 1
#> .. .. .. .. .. .. ..@ coords : num [1:2367, 1:2] -58.4 -58.4 -58.3 -58.3 -58.3 ...
#> .. .. .. ..@ plotOrder: int 1
#> .. .. .. ..@ labpt : num [1:2] -57.52 -1.47
#> .. .. .. ..@ ID : chr "5"
#> .. .. .. ..@ area : num 29.8
#> .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
#> .. .. .. ..@ Polygons :List of 1
#> .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
#> .. .. .. .. .. .. ..@ labpt : num [1:2] -63.9 -12.9
#> .. .. .. .. .. .. ..@ area : num 115
#> .. .. .. .. .. .. ..@ hole : logi FALSE
#> .. .. .. .. .. .. ..@ ringDir: int 1
#> .. .. .. .. .. .. ..@ coords : num [1:3803, 1:2] -63.5 -63.5 -63.5 -63.5 -63.5 ...
#> .. .. .. ..@ plotOrder: int 1
#> .. .. .. ..@ labpt : num [1:2] -63.9 -12.9
#> .. .. .. ..@ ID : chr "6"
#> .. .. .. ..@ area : num 115
#> .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
#> .. .. .. ..@ Polygons :List of 1
#> .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
#> .. .. .. .. .. .. ..@ labpt : num [1:2] -60.68 -4.29
#> .. .. .. .. .. .. ..@ area : num 4.44
#> .. .. .. .. .. .. ..@ hole : logi FALSE
#> .. .. .. .. .. .. ..@ ringDir: int 1
#> .. .. .. .. .. .. ..@ coords : num [1:875, 1:2] -61.3 -61.3 -61.4 -61.4 -61.4 ...
#> .. .. .. ..@ plotOrder: int 1
#> .. .. .. ..@ labpt : num [1:2] -60.68 -4.29
#> .. .. .. ..@ ID : chr "7"
#> .. .. .. ..@ area : num 4.44
#> .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
#> .. .. .. ..@ Polygons :List of 1
#> .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
#> .. .. .. .. .. .. ..@ labpt : num [1:2] -64.502 0.779
#> .. .. .. .. .. .. ..@ area : num 58.2
#> .. .. .. .. .. .. ..@ hole : logi FALSE
#> .. .. .. .. .. .. ..@ ringDir: int 1
#> .. .. .. .. .. .. ..@ coords : num [1:3569, 1:2] -62.9 -62.9 -62.8 -62.8 -62.8 ...
#> .. .. .. ..@ plotOrder: int 1
#> .. .. .. ..@ labpt : num [1:2] -64.502 0.779
#> .. .. .. ..@ ID : chr "8"
#> .. .. .. ..@ area : num 58.2
#> .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
#> .. .. .. ..@ Polygons :List of 1
#> .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
#> .. .. .. .. .. .. ..@ labpt : num [1:2] -71.6 -5.6
#> .. .. .. .. .. .. ..@ area : num 180
#> .. .. .. .. .. .. ..@ hole : logi FALSE
#> .. .. .. .. .. .. ..@ ringDir: int 1
#> .. .. .. .. .. .. ..@ coords : num [1:4102, 1:2] -61.3 -61.3 -61.3 -61.3 -61.3 ...
#> .. .. .. ..@ plotOrder: int 1
#> .. .. .. ..@ labpt : num [1:2] -71.6 -5.6
#> .. .. .. ..@ ID : chr "9"
#> .. .. .. ..@ area : num 180
#> .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
#> .. .. .. ..@ Polygons :List of 1
#> .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
#> .. .. .. .. .. .. ..@ labpt : num [1:2] -49.523 -0.905
#> .. .. .. .. .. .. ..@ area : num 2.52
#> .. .. .. .. .. .. ..@ hole : logi FALSE
#> .. .. .. .. .. .. ..@ ringDir: int 1
#> .. .. .. .. .. .. ..@ coords : num [1:824, 1:2] -48.7 -48.7 -48.7 -48.7 -48.7 ...
#> .. .. .. ..@ plotOrder: int 1
#> .. .. .. ..@ labpt : num [1:2] -49.523 -0.905
#> .. .. .. ..@ ID : chr "10"
#> .. .. .. ..@ area : num 2.52
#> .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
#> .. .. .. ..@ Polygons :List of 1
#> .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
#> .. .. .. .. .. .. ..@ labpt : num [1:2] -51.53 -1.93
#> .. .. .. .. .. .. ..@ area : num 0.542
#> .. .. .. .. .. .. ..@ hole : logi FALSE
#> .. .. .. .. .. .. ..@ ringDir: int 1
#> .. .. .. .. .. .. ..@ coords : num [1:339, 1:2] -51.9 -52 -52 -52 -52 ...
#> .. .. .. ..@ plotOrder: int 1
#> .. .. .. ..@ labpt : num [1:2] -51.53 -1.93
#> .. .. .. ..@ ID : chr "11"
#> .. .. .. ..@ area : num 0.542
#> .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
#> .. .. .. ..@ Polygons :List of 1
#> .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
#> .. .. .. .. .. .. ..@ labpt : num [1:2] -51.2 -3.14
#> .. .. .. .. .. .. ..@ area : num 1.1
#> .. .. .. .. .. .. ..@ hole : logi FALSE
#> .. .. .. .. .. .. ..@ ringDir: int 1
#> .. .. .. .. .. .. ..@ coords : num [1:387, 1:2] -50.9 -50.9 -51 -51 -51 ...
#> .. .. .. ..@ plotOrder: int 1
#> .. .. .. ..@ labpt : num [1:2] -51.2 -3.14
#> .. .. .. ..@ ID : chr "12"
#> .. .. .. ..@ area : num 1.1
#> .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
#> .. .. .. ..@ Polygons :List of 1
#> .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
#> .. .. .. .. .. .. ..@ labpt : num [1:2] -51.29 -2.05
#> .. .. .. .. .. .. ..@ area : num 0.121
#> .. .. .. .. .. .. ..@ hole : logi FALSE
#> .. .. .. .. .. .. ..@ ringDir: int 1
#> .. .. .. .. .. .. ..@ coords : num [1:160, 1:2] -51.3 -51.3 -51.3 -51.3 -51.3 ...
#> .. .. .. ..@ plotOrder: int 1
#> .. .. .. ..@ labpt : num [1:2] -51.29 -2.05
#> .. .. .. ..@ ID : chr "13"
#> .. .. .. ..@ area : num 0.121
#> .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
#> .. .. .. ..@ Polygons :List of 1
#> .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
#> .. .. .. .. .. .. ..@ labpt : num [1:2] -50.54 -3.68
#> .. .. .. .. .. .. ..@ area : num 2.14
#> .. .. .. .. .. .. ..@ hole : logi FALSE
#> .. .. .. .. .. .. ..@ ringDir: int 1
#> .. .. .. .. .. .. ..@ coords : num [1:706, 1:2] -50.5 -50.5 -50.5 -50.5 -50.5 ...
#> .. .. .. ..@ plotOrder: int 1
#> .. .. .. ..@ labpt : num [1:2] -50.54 -3.68
#> .. .. .. ..@ ID : chr "14"
#> .. .. .. ..@ area : num 2.14
#> .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
#> .. .. .. ..@ Polygons :List of 1
#> .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
#> .. .. .. .. .. .. ..@ labpt : num [1:2] -50.55 -2.32
#> .. .. .. .. .. .. ..@ area : num 0.304
#> .. .. .. .. .. .. ..@ hole : logi FALSE
#> .. .. .. .. .. .. ..@ ringDir: int 1
#> .. .. .. .. .. .. ..@ coords : num [1:188, 1:2] -50.8 -50.9 -50.9 -50.9 -50.9 ...
#> .. .. .. ..@ plotOrder: int 1
#> .. .. .. ..@ labpt : num [1:2] -50.55 -2.32
#> .. .. .. ..@ ID : chr "15"
#> .. .. .. ..@ area : num 0.304
#> .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
#> .. .. .. ..@ Polygons :List of 1
#> .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
#> .. .. .. .. .. .. ..@ labpt : num [1:2] -50.12 -2.65
#> .. .. .. .. .. .. ..@ area : num 0.306
#> .. .. .. .. .. .. ..@ hole : logi FALSE
#> .. .. .. .. .. .. ..@ ringDir: int 1
#> .. .. .. .. .. .. ..@ coords : num [1:211, 1:2] -50.1 -50.1 -50.1 -50.1 -50.1 ...
#> .. .. .. ..@ plotOrder: int 1
#> .. .. .. ..@ labpt : num [1:2] -50.12 -2.65
#> .. .. .. ..@ ID : chr "16"
#> .. .. .. ..@ area : num 0.306
#> .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
#> .. .. .. ..@ Polygons :List of 1
#> .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
#> .. .. .. .. .. .. ..@ labpt : num [1:2] -50.18 -2.04
#> .. .. .. .. .. .. ..@ area : num 0.123
#> .. .. .. .. .. .. ..@ hole : logi FALSE
#> .. .. .. .. .. .. ..@ ringDir: int 1
#> .. .. .. .. .. .. ..@ coords : num [1:117, 1:2] -50.4 -50.4 -50.4 -50.4 -50.4 ...
#> .. .. .. ..@ plotOrder: int 1
#> .. .. .. ..@ labpt : num [1:2] -50.18 -2.04
#> .. .. .. ..@ ID : chr "17"
#> .. .. .. ..@ area : num 0.123
#> .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
#> .. .. .. ..@ Polygons :List of 1
#> .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
#> .. .. .. .. .. .. ..@ labpt : num [1:2] -49.88 -2.34
#> .. .. .. .. .. .. ..@ area : num 0.29
#> .. .. .. .. .. .. ..@ hole : logi FALSE
#> .. .. .. .. .. .. ..@ ringDir: int 1
#> .. .. .. .. .. .. ..@ coords : num [1:120, 1:2] -50 -50.1 -50.1 -50.1 -50.1 ...
#> .. .. .. ..@ plotOrder: int 1
#> .. .. .. ..@ labpt : num [1:2] -49.88 -2.34
#> .. .. .. ..@ ID : chr "18"
#> .. .. .. ..@ area : num 0.29
#> .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
#> .. .. .. ..@ Polygons :List of 1
#> .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
#> .. .. .. .. .. .. ..@ labpt : num [1:2] -49.59 -2.08
#> .. .. .. .. .. .. ..@ area : num 0.149
#> .. .. .. .. .. .. ..@ hole : logi FALSE
#> .. .. .. .. .. .. ..@ ringDir: int 1
#> .. .. .. .. .. .. ..@ coords : num [1:146, 1:2] -49.8 -49.9 -49.9 -49.8 -49.8 ...
#> .. .. .. ..@ plotOrder: int 1
#> .. .. .. ..@ labpt : num [1:2] -49.59 -2.08
#> .. .. .. ..@ ID : chr "19"
#> .. .. .. ..@ area : num 0.149
#> .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
#> .. .. .. ..@ Polygons :List of 1
#> .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
#> .. .. .. .. .. .. ..@ labpt : num [1:2] -49.7 -4.3
#> .. .. .. .. .. .. ..@ area : num 2.22
#> .. .. .. .. .. .. ..@ hole : logi FALSE
#> .. .. .. .. .. .. ..@ ringDir: int 1
#> .. .. .. .. .. .. ..@ coords : num [1:663, 1:2] -49.2 -49.2 -49.2 -49.2 -49.2 ...
#> .. .. .. ..@ plotOrder: int 1
#> .. .. .. ..@ labpt : num [1:2] -49.7 -4.3
#> .. .. .. ..@ ID : chr "20"
#> .. .. .. ..@ area : num 2.22
#> .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
#> .. .. .. ..@ Polygons :List of 1
#> .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
#> .. .. .. .. .. .. ..@ labpt : num [1:2] -50.05 -6.16
#> .. .. .. .. .. .. ..@ area : num 3.37
#> .. .. .. .. .. .. ..@ hole : logi FALSE
#> .. .. .. .. .. .. ..@ ringDir: int 1
#> .. .. .. .. .. .. ..@ coords : num [1:727, 1:2] -48.7 -48.6 -48.6 -48.6 -48.6 ...
#> .. .. .. ..@ plotOrder: int 1
#> .. .. .. ..@ labpt : num [1:2] -50.05 -6.16
#> .. .. .. ..@ ID : chr "21"
#> .. .. .. ..@ area : num 3.37
#> .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
#> .. .. .. ..@ Polygons :List of 1
#> .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
#> .. .. .. .. .. .. ..@ labpt : num [1:2] -48.85 -5.25
#> .. .. .. .. .. .. ..@ area : num 0.439
#> .. .. .. .. .. .. ..@ hole : logi FALSE
#> .. .. .. .. .. .. ..@ ringDir: int 1
#> .. .. .. .. .. .. ..@ coords : num [1:206, 1:2] -48.8 -48.8 -48.8 -48.8 -48.8 ...
#> .. .. .. ..@ plotOrder: int 1
#> .. .. .. ..@ labpt : num [1:2] -48.85 -5.25
#> .. .. .. ..@ ID : chr "22"
#> .. .. .. ..@ area : num 0.439
#> .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
#> .. .. .. ..@ Polygons :List of 1
#> .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
#> .. .. .. .. .. .. ..@ labpt : num [1:2] -47.8 -11.4
#> .. .. .. .. .. .. ..@ area : num 25.4
#> .. .. .. .. .. .. ..@ hole : logi FALSE
#> .. .. .. .. .. .. ..@ ringDir: int 1
#> .. .. .. .. .. .. ..@ coords : num [1:3792, 1:2] -46.2 -46.2 -46.2 -46.2 -46.2 ...
#> .. .. .. ..@ plotOrder: int 1
#> .. .. .. ..@ labpt : num [1:2] -47.8 -11.4
#> .. .. .. ..@ ID : chr "23"
#> .. .. .. ..@ area : num 25.4
#> .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
#> .. .. .. ..@ Polygons :List of 1
#> .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
#> .. .. .. .. .. .. ..@ labpt : num [1:2] -49.4 -8.07
#> .. .. .. .. .. .. ..@ area : num 8.59
#> .. .. .. .. .. .. ..@ hole : logi FALSE
#> .. .. .. .. .. .. ..@ ringDir: int 1
#> .. .. .. .. .. .. ..@ coords : num [1:1119, 1:2] -49 -49 -49 -49 -49 ...
#> .. .. .. ..@ plotOrder: int 1
#> .. .. .. ..@ labpt : num [1:2] -49.4 -8.07
#> .. .. .. ..@ ID : chr "24"
#> .. .. .. ..@ area : num 8.59
#> .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
#> .. .. .. ..@ Polygons :List of 1
#> .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
#> .. .. .. .. .. .. ..@ labpt : num [1:2] -49.8 -11.6
#> .. .. .. .. .. .. ..@ area : num 4.4
#> .. .. .. .. .. .. ..@ hole : logi FALSE
#> .. .. .. .. .. .. ..@ ringDir: int 1
#> .. .. .. .. .. .. ..@ coords : num [1:559, 1:2] -49.3 -49.3 -49.3 -49.3 -49.3 ...
#> .. .. .. ..@ plotOrder: int 1
#> .. .. .. ..@ labpt : num [1:2] -49.8 -11.6
#> .. .. .. ..@ ID : chr "25"
#> .. .. .. ..@ area : num 4.4
#> .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
#> .. .. .. ..@ Polygons :List of 1
#> .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
#> .. .. .. .. .. .. ..@ labpt : num [1:2] -51.2 -10.9
#> .. .. .. .. .. .. ..@ area : num 2.73
#> .. .. .. .. .. .. ..@ hole : logi FALSE
#> .. .. .. .. .. .. ..@ ringDir: int 1
#> .. .. .. .. .. .. ..@ coords : num [1:534, 1:2] -50.2 -50.2 -50.2 -50.2 -50.2 ...
#> .. .. .. ..@ plotOrder: int 1
#> .. .. .. ..@ labpt : num [1:2] -51.2 -10.9
#> .. .. .. ..@ ID : chr "26"
#> .. .. .. ..@ area : num 2.73
#> .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
#> .. .. .. ..@ Polygons :List of 1
#> .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
#> .. .. .. .. .. .. ..@ labpt : num [1:2] -52.6 -14.4
#> .. .. .. .. .. .. ..@ area : num 5.17
#> .. .. .. .. .. .. ..@ hole : logi FALSE
#> .. .. .. .. .. .. ..@ ringDir: int 1
#> .. .. .. .. .. .. ..@ coords : num [1:1241, 1:2] -54.7 -54.7 -54.7 -54.6 -54.6 ...
#> .. .. .. ..@ plotOrder: int 1
#> .. .. .. ..@ labpt : num [1:2] -52.6 -14.4
#> .. .. .. ..@ ID : chr "27"
#> .. .. .. ..@ area : num 5.17
#> .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
#> .. .. .. ..@ Polygons :List of 1
#> .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
#> .. .. .. .. .. .. ..@ labpt : num [1:2] -51.4 -15.4
#> .. .. .. .. .. .. ..@ area : num 11.2
#> .. .. .. .. .. .. ..@ hole : logi FALSE
#> .. .. .. .. .. .. ..@ ringDir: int 1
#> .. .. .. .. .. .. ..@ coords : num [1:1613, 1:2] -52.9 -52.9 -52.9 -52.9 -52.9 ...
#> .. .. .. ..@ plotOrder: int 1
#> .. .. .. ..@ labpt : num [1:2] -51.4 -15.4
#> .. .. .. ..@ ID : chr "28"
#> .. .. .. ..@ area : num 11.2
#> .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
#> .. .. .. ..@ Polygons :List of 1
#> .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
#> .. .. .. .. .. .. ..@ labpt : num [1:2] -46.07 -3.74
#> .. .. .. .. .. .. ..@ area : num 28.9
#> .. .. .. .. .. .. ..@ hole : logi FALSE
#> .. .. .. .. .. .. ..@ ringDir: int 1
#> .. .. .. .. .. .. ..@ coords : num [1:4672, 1:2] -42 -42 -42 -41.9 -41.9 ...
#> .. .. .. ..@ plotOrder: int 1
#> .. .. .. ..@ labpt : num [1:2] -46.07 -3.74
#> .. .. .. ..@ ID : chr "29"
#> .. .. .. ..@ area : num 28.9
#> .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
#> .. .. .. ..@ Polygons :List of 1
#> .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
#> .. .. .. .. .. .. ..@ labpt : num [1:2] -43.29 -7.29
#> .. .. .. .. .. .. ..@ area : num 26.9
#> .. .. .. .. .. .. ..@ hole : logi FALSE
#> .. .. .. .. .. .. ..@ ringDir: int 1
#> .. .. .. .. .. .. ..@ coords : num [1:3299, 1:2] -46.8 -46.8 -46.8 -46.8 -46.8 ...
#> .. .. .. ..@ plotOrder: int 1
#> .. .. .. ..@ labpt : num [1:2] -43.29 -7.29
#> .. .. .. ..@ ID : chr "30"
#> .. .. .. ..@ area : num 26.9
#> .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
#> .. .. .. ..@ Polygons :List of 1
#> .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
#> .. .. .. .. .. .. ..@ labpt : num [1:2] -37.92 -6.15
#> .. .. .. .. .. .. ..@ area : num 23.4
#> .. .. .. .. .. .. ..@ hole : logi FALSE
#> .. .. .. .. .. .. ..@ ringDir: int 1
#> .. .. .. .. .. .. ..@ coords : num [1:3079, 1:2] -39.9 -39.9 -39.9 -39.9 -39.9 ...
#> .. .. .. ..@ plotOrder: int 1
#> .. .. .. ..@ labpt : num [1:2] -37.92 -6.15
#> .. .. .. ..@ ID : chr "31"
#> .. .. .. ..@ area : num 23.4
#> .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
#> .. .. .. ..@ Polygons :List of 1
#> .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
#> .. .. .. .. .. .. ..@ labpt : num [1:2] -43.3 -13.4
#> .. .. .. .. .. .. ..@ area : num 53.2
#> .. .. .. .. .. .. ..@ hole : logi FALSE
#> .. .. .. .. .. .. ..@ ringDir: int 1
#> .. .. .. .. .. .. ..@ coords : num [1:6836, 1:2] -43.7 -43.7 -43.7 -43.7 -43.8 ...
#> .. .. .. ..@ plotOrder: int 1
#> .. .. .. ..@ labpt : num [1:2] -43.3 -13.4
#> .. .. .. ..@ ID : chr "32"
#> .. .. .. ..@ area : num 53.2
#> .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
#> .. .. .. ..@ Polygons :List of 1
#> .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
#> .. .. .. .. .. .. ..@ labpt : num [1:2] -40.4 -14.4
#> .. .. .. .. .. .. ..@ area : num 32.7
#> .. .. .. .. .. .. ..@ hole : logi FALSE
#> .. .. .. .. .. .. ..@ ringDir: int 1
#> .. .. .. .. .. .. ..@ coords : num [1:3225, 1:2] -42.8 -42.8 -42.8 -42.8 -42.8 ...
#> .. .. .. ..@ plotOrder: int 1
#> .. .. .. ..@ labpt : num [1:2] -40.4 -14.4
#> .. .. .. ..@ ID : chr "33"
#> .. .. .. ..@ area : num 32.7
#> .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
#> .. .. .. ..@ Polygons :List of 1
#> .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
#> .. .. .. .. .. .. ..@ labpt : num [1:2] -42.2 -19.4
#> .. .. .. .. .. .. ..@ area : num 7.11
#> .. .. .. .. .. .. ..@ hole : logi FALSE
#> .. .. .. .. .. .. ..@ ringDir: int 1
#> .. .. .. .. .. .. ..@ coords : num [1:1706, 1:2] -41 -41 -41 -41 -41 ...
#> .. .. .. ..@ plotOrder: int 1
#> .. .. .. ..@ labpt : num [1:2] -42.2 -19.4
#> .. .. .. ..@ ID : chr "34"
#> .. .. .. ..@ area : num 7.11
#> .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
#> .. .. .. ..@ Polygons :List of 1
#> .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
#> .. .. .. .. .. .. ..@ labpt : num [1:2] -49.9 -28.1
#> .. .. .. .. .. .. ..@ area : num 34.9
#> .. .. .. .. .. .. ..@ hole : logi FALSE
#> .. .. .. .. .. .. ..@ ringDir: int 1
#> .. .. .. .. .. .. ..@ coords : num [1:6662, 1:2] -50.6 -50.6 -50.6 -50.7 -50.7 ...
#> .. .. .. ..@ plotOrder: int 1
#> .. .. .. ..@ labpt : num [1:2] -49.9 -28.1
#> .. .. .. ..@ ID : chr "35"
#> .. .. .. ..@ area : num 34.9
#> .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
#> .. .. .. ..@ Polygons :List of 1
#> .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
#> .. .. .. .. .. .. ..@ labpt : num [1:2] -55.2 -30
#> .. .. .. .. .. .. ..@ area : num 32.6
#> .. .. .. .. .. .. ..@ hole : logi FALSE
#> .. .. .. .. .. .. ..@ ringDir: int 1
#> .. .. .. .. .. .. ..@ coords : num [1:2311, 1:2] -59 -59 -59 -59 -59 ...
#> .. .. .. ..@ plotOrder: int 1
#> .. .. .. ..@ labpt : num [1:2] -55.2 -30
#> .. .. .. ..@ ID : chr "36"
#> .. .. .. ..@ area : num 32.6
#> .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
#> .. .. .. ..@ Polygons :List of 1
#> .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
#> .. .. .. .. .. .. ..@ labpt : num [1:2] -50.8 -21.8
#> .. .. .. .. .. .. ..@ area : num 84
#> .. .. .. .. .. .. ..@ hole : logi FALSE
#> .. .. .. .. .. .. ..@ ringDir: int 1
#> .. .. .. .. .. .. ..@ coords : num [1:5790, 1:2] -46.8 -46.8 -46.8 -46.8 -46.8 ...
#> .. .. .. ..@ plotOrder: int 1
#> .. .. .. ..@ labpt : num [1:2] -50.8 -21.8
#> .. .. .. ..@ ID : chr "37"
#> .. .. .. ..@ area : num 84
#> .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
#> .. .. .. ..@ Polygons :List of 1
#> .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
#> .. .. .. .. .. .. ..@ labpt : num [1:2] -57.9 -19.7
#> .. .. .. .. .. .. ..@ area : num 68
#> .. .. .. .. .. .. ..@ hole : logi FALSE
#> .. .. .. .. .. .. ..@ ringDir: int 1
#> .. .. .. .. .. .. ..@ coords : num [1:3050, 1:2] -63 -63.1 -63.1 -63.3 -63.4 ...
#> .. .. .. ..@ plotOrder: int 1
#> .. .. .. ..@ labpt : num [1:2] -57.9 -19.7
#> .. .. .. ..@ ID : chr "38"
#> .. .. .. ..@ area : num 68
#> ..@ plotOrder : int [1:39] 10 7 38 39 9 33 3 5 36 34 ...
#> ..@ bbox : num [1:2, 1:2] -79.59 -34.95 -34.79 5.74
#> .. ..- attr(*, "dimnames")=List of 2
#> .. .. ..$ : chr [1:2] "x" "y"
#> .. .. ..$ : chr [1:2] "min" "max"
#> ..@ proj4string:Formal class 'CRS' [package "sp"] with 1 slot
#> .. .. ..@ projargs: chr "+proj=longlat +ellps=aust_SA +no_defs"
plot(bacias)
O R possui uma variedade de funções para se obter informações sobre arquivos, diretórios, permissões de acesso e etc.
Quando abrimos uma sessão no R, ela é associada a um diretório de trabalho (working directory, wd
). Esse local é a primeiro diretório onde o R irá salvar ou ler um arquivo de dados, se o caminho completo até o arquivo não for especificado. Para saber qual é o diretório de trabalho usamos a função getwd()
. Para alterar o wd
usamos setwd()
. Para listar o conteúdo de um diretório usamos a função dir()
.
# variável do tipo character com nome do diretório
(wd <- getwd())
#> [1] "/home/hidrometeorologista/Dropbox/ufsm/ensino/_1-semestre-2018/analise-dados-amb-r/adar-ufsm"
class(wd)
#> [1] "character"
# altere o caminho para "/home/lci"
setwd(file.path("/home", Sys.getenv()[["LOGNAME"]]))
getwd()
#> [1] "/home/hidrometeorologista"
# volta para o wd
setwd(wd)
getwd()
#> [1] "/home/hidrometeorologista/Dropbox/ufsm/ensino/_1-semestre-2018/analise-dados-amb-r/adar-ufsm"
Para saber o diretório de instalação do R, usamos R.home()
. O local de instalação dos pacotes é obtido via .libPaths()
.
Podemos construir o caminho até um arquivo usando o nome do diretório e do arquivo com a função file.path()
. O que é equivalente a função paste(a, b, sep = "/")
. A partir da string
com o caminho completo para o arquivo, podemos extrair o diretório (dirname()
), o nome do arquivo () e a extensão do arquivo.
# carregando pacote tools para usar função file_ext()
library(tools)
# emenda diretorio ao nome do aruivo com "/"
file_name <- file.path(wd, "CHUVAS.TXT")
file.path("/home", "lci", "nome_aluno", "R")
#> [1] "/home/lci/nome_aluno/R"
# equivalente a
paste(file.path(wd, "CHUVAS.TXT"), sep = "/")
#> [1] "/home/hidrometeorologista/Dropbox/ufsm/ensino/_1-semestre-2018/analise-dados-amb-r/adar-ufsm/CHUVAS.TXT"
# diretório de um arquivo
dirname(file_name)
#> [1] "/home/hidrometeorologista/Dropbox/ufsm/ensino/_1-semestre-2018/analise-dados-amb-r/adar-ufsm"
# nome do arquivo
basename(file_name)
#> [1] "CHUVAS.TXT"
# extensão do arquivo
file_ext(file_name)
#> [1] "TXT"
A função file.exists()
permite verificar se um arquivo já existe, o que pode ser usado para evitar de sobrescrever um arquivo com mesmo nome. Metadados do arquivo podem ser obtidos via file.info()
.
# seleção iterativa de um arquivo
arq_name <- file.choose()
arq_name
# verifica existência do arquivo
file.exists(file_name)
#> [1] FALSE
# tamanho, data de criação, permissões, etc
file.info("data/chuva_df.RData")
#> size isdir mode mtime
#> data/chuva_df.RData 23031 FALSE 664 2018-05-07 13:23:41
#> ctime atime uid gid
#> data/chuva_df.RData 2018-05-07 13:23:41 2018-05-07 13:23:41 1000 1000
#> uname grname
#> data/chuva_df.RData hidrometeorologista hidrometeorologista
Para listar o conteúdo de um diretório usamos as funções dir()
e list.dirs()
.
A função list.files()
permite listar arquivos usando regex. Uma boa referência para aprender regex é o site do Aurélio. Nós vamos ver aqui apenas algumas regex básicas para ilustrar o uso da list.files()
.
# lista conteúdo do diretórios
dir()
#> [1] "1_Rinstall.html"
#> [2] "1_Rinstall.Rmd"
#> [3] "2_InterfaceUsuario.html"
#> [4] "2_InterfaceUsuario.Rmd"
#> [5] "3_OperacoesBasicas.html"
#> [6] "3_OperacoesBasicas.Rmd"
#> [7] "4_TiposDeDados.html"
#> [8] "4_TiposDeDados.Rmd"
#> [9] "5_EntradaDeDados.Rmd"
#> [10] "5_EstruturaDeDados.html"
#> [11] "5_EstruturaDeDados.md"
#> [12] "5_EstruturaDeDados.Rmd"
#> [13] "6_EntradaDeDados.html"
#> [14] "6_EntradaDeDados.md"
#> [15] "6_EntradaDeDados.Rmd"
#> [16] "7_Programacao.html"
#> [17] "7_Programacao.md"
#> [18] "7_Programacao.Rmd"
#> [19] "8_Datas.html"
#> [20] "8_Datas.md"
#> [21] "8_Datas.Rmd"
#> [22] "9_manipData.html"
#> [23] "9_manipData.md"
#> [24] "9_manipData.Rmd"
#> [25] "A1_linux-cmds-min.nb.html"
#> [26] "A1_linux-cmds-min.Rmd"
#> [27] "A2_rstudio.nb.html"
#> [28] "A2_rstudio.Rmd"
#> [29] "A3_sorteio_nums_aleatorios.nb.html"
#> [30] "A3_sorteio_nums_aleatorios.Rmd"
#> [31] "adar-ufsm.Rproj"
#> [32] "apres_course.html"
#> [33] "apres_course.md"
#> [34] "apres_course.Rpres"
#> [35] "data"
#> [36] "figs"
#> [37] "lista_pcks4mets.html"
#> [38] "lista_pcks4mets.md"
#> [39] "lista_pcks4mets.Rmd"
#> [40] "mapa_loc.nb.html"
#> [41] "mapa_loc.Rmd"
#> [42] "my_style.css"
#> [43] "plot-dados-categ-raster.html"
#> [44] "plot-dados-categ-raster.Rmd"
#> [45] "plot_script1.pdf"
#> [46] "R"
#> [47] "README.html"
#> [48] "README.md"
#> [49] "Rmarkdown.html"
#> [50] "Rmarkdown.md"
#> [51] "Rmarkdown.Rmd"
#> [52] "rsconnect"
#> [53] "shapefile2kml.html"
#> [54] "shapefile2kml.md"
#> [55] "shapefile2kml.nb.html"
#> [56] "shapefile2kml.Rmd"
#> [57] "solucao-prob-linux-lsi.nb.html"
#> [58] "solucao-prob-linux-lsi.Rmd"
#> [59] "themMapStudyRegion.nb.html"
#> [60] "themMapStudyRegion.Rmd"
# lista diretórios e sub-dirs
list.dirs()
#> [1] "."
#> [2] "./data"
#> [3] "./data/Bacia7"
#> [4] "./data/Limites_v2015_20160809"
#> [5] "./data/Limites_v2015_20160809/Limite_v2015_2016-08-03"
#> [6] "./figs"
#> [7] "./.git"
#> [8] "./.git/branches"
#> [9] "./.git/hooks"
#> [10] "./.git/info"
#> [11] "./.git/logs"
#> [12] "./.git/logs/refs"
#> [13] "./.git/logs/refs/heads"
#> [14] "./.git/logs/refs/remotes"
#> [15] "./.git/logs/refs/remotes/origin"
#> [16] "./.git/objects"
#> [17] "./.git/objects/00"
#> [18] "./.git/objects/01"
#> [19] "./.git/objects/02"
#> [20] "./.git/objects/03"
#> [21] "./.git/objects/04"
#> [22] "./.git/objects/05"
#> [23] "./.git/objects/06"
#> [24] "./.git/objects/07"
#> [25] "./.git/objects/08"
#> [26] "./.git/objects/09"
#> [27] "./.git/objects/0a"
#> [28] "./.git/objects/0b"
#> [29] "./.git/objects/0c"
#> [30] "./.git/objects/0d"
#> [31] "./.git/objects/0e"
#> [32] "./.git/objects/0f"
#> [33] "./.git/objects/10"
#> [34] "./.git/objects/11"
#> [35] "./.git/objects/12"
#> [36] "./.git/objects/13"
#> [37] "./.git/objects/14"
#> [38] "./.git/objects/15"
#> [39] "./.git/objects/16"
#> [40] "./.git/objects/17"
#> [41] "./.git/objects/18"
#> [42] "./.git/objects/19"
#> [43] "./.git/objects/1a"
#> [44] "./.git/objects/1b"
#> [45] "./.git/objects/1c"
#> [46] "./.git/objects/1d"
#> [47] "./.git/objects/1e"
#> [48] "./.git/objects/1f"
#> [49] "./.git/objects/20"
#> [50] "./.git/objects/21"
#> [51] "./.git/objects/22"
#> [52] "./.git/objects/23"
#> [53] "./.git/objects/24"
#> [54] "./.git/objects/25"
#> [55] "./.git/objects/26"
#> [56] "./.git/objects/27"
#> [57] "./.git/objects/28"
#> [58] "./.git/objects/29"
#> [59] "./.git/objects/2a"
#> [60] "./.git/objects/2b"
#> [61] "./.git/objects/2c"
#> [62] "./.git/objects/2d"
#> [63] "./.git/objects/2e"
#> [64] "./.git/objects/2f"
#> [65] "./.git/objects/30"
#> [66] "./.git/objects/31"
#> [67] "./.git/objects/32"
#> [68] "./.git/objects/33"
#> [69] "./.git/objects/34"
#> [70] "./.git/objects/35"
#> [71] "./.git/objects/36"
#> [72] "./.git/objects/37"
#> [73] "./.git/objects/38"
#> [74] "./.git/objects/39"
#> [75] "./.git/objects/3a"
#> [76] "./.git/objects/3b"
#> [77] "./.git/objects/3c"
#> [78] "./.git/objects/3d"
#> [79] "./.git/objects/3e"
#> [80] "./.git/objects/3f"
#> [81] "./.git/objects/40"
#> [82] "./.git/objects/41"
#> [83] "./.git/objects/42"
#> [84] "./.git/objects/43"
#> [85] "./.git/objects/44"
#> [86] "./.git/objects/45"
#> [87] "./.git/objects/46"
#> [88] "./.git/objects/47"
#> [89] "./.git/objects/48"
#> [90] "./.git/objects/49"
#> [91] "./.git/objects/4a"
#> [92] "./.git/objects/4b"
#> [93] "./.git/objects/4c"
#> [94] "./.git/objects/4d"
#> [95] "./.git/objects/4e"
#> [96] "./.git/objects/4f"
#> [97] "./.git/objects/50"
#> [98] "./.git/objects/51"
#> [99] "./.git/objects/52"
#> [100] "./.git/objects/53"
#> [101] "./.git/objects/54"
#> [102] "./.git/objects/55"
#> [103] "./.git/objects/56"
#> [104] "./.git/objects/57"
#> [105] "./.git/objects/58"
#> [106] "./.git/objects/59"
#> [107] "./.git/objects/5a"
#> [108] "./.git/objects/5b"
#> [109] "./.git/objects/5c"
#> [110] "./.git/objects/5d"
#> [111] "./.git/objects/5e"
#> [112] "./.git/objects/5f"
#> [113] "./.git/objects/60"
#> [114] "./.git/objects/61"
#> [115] "./.git/objects/62"
#> [116] "./.git/objects/63"
#> [117] "./.git/objects/64"
#> [118] "./.git/objects/65"
#> [119] "./.git/objects/66"
#> [120] "./.git/objects/67"
#> [121] "./.git/objects/68"
#> [122] "./.git/objects/69"
#> [123] "./.git/objects/6a"
#> [124] "./.git/objects/6b"
#> [125] "./.git/objects/6c"
#> [126] "./.git/objects/6d"
#> [127] "./.git/objects/6e"
#> [128] "./.git/objects/6f"
#> [129] "./.git/objects/70"
#> [130] "./.git/objects/71"
#> [131] "./.git/objects/72"
#> [132] "./.git/objects/73"
#> [133] "./.git/objects/74"
#> [134] "./.git/objects/75"
#> [135] "./.git/objects/76"
#> [136] "./.git/objects/77"
#> [137] "./.git/objects/78"
#> [138] "./.git/objects/79"
#> [139] "./.git/objects/7a"
#> [140] "./.git/objects/7b"
#> [141] "./.git/objects/7c"
#> [142] "./.git/objects/7d"
#> [143] "./.git/objects/7e"
#> [144] "./.git/objects/7f"
#> [145] "./.git/objects/80"
#> [146] "./.git/objects/81"
#> [147] "./.git/objects/82"
#> [148] "./.git/objects/83"
#> [149] "./.git/objects/84"
#> [150] "./.git/objects/85"
#> [151] "./.git/objects/86"
#> [152] "./.git/objects/87"
#> [153] "./.git/objects/88"
#> [154] "./.git/objects/89"
#> [155] "./.git/objects/8a"
#> [156] "./.git/objects/8b"
#> [157] "./.git/objects/8c"
#> [158] "./.git/objects/8d"
#> [159] "./.git/objects/8e"
#> [160] "./.git/objects/8f"
#> [161] "./.git/objects/90"
#> [162] "./.git/objects/91"
#> [163] "./.git/objects/92"
#> [164] "./.git/objects/93"
#> [165] "./.git/objects/94"
#> [166] "./.git/objects/95"
#> [167] "./.git/objects/96"
#> [168] "./.git/objects/97"
#> [169] "./.git/objects/98"
#> [170] "./.git/objects/99"
#> [171] "./.git/objects/9a"
#> [172] "./.git/objects/9b"
#> [173] "./.git/objects/9c"
#> [174] "./.git/objects/9d"
#> [175] "./.git/objects/9e"
#> [176] "./.git/objects/9f"
#> [177] "./.git/objects/a0"
#> [178] "./.git/objects/a1"
#> [179] "./.git/objects/a2"
#> [180] "./.git/objects/a3"
#> [181] "./.git/objects/a4"
#> [182] "./.git/objects/a5"
#> [183] "./.git/objects/a6"
#> [184] "./.git/objects/a7"
#> [185] "./.git/objects/a8"
#> [186] "./.git/objects/a9"
#> [187] "./.git/objects/aa"
#> [188] "./.git/objects/ab"
#> [189] "./.git/objects/ac"
#> [190] "./.git/objects/ad"
#> [191] "./.git/objects/ae"
#> [192] "./.git/objects/af"
#> [193] "./.git/objects/b0"
#> [194] "./.git/objects/b1"
#> [195] "./.git/objects/b2"
#> [196] "./.git/objects/b3"
#> [197] "./.git/objects/b4"
#> [198] "./.git/objects/b5"
#> [199] "./.git/objects/b6"
#> [200] "./.git/objects/b7"
#> [201] "./.git/objects/b8"
#> [202] "./.git/objects/b9"
#> [203] "./.git/objects/ba"
#> [204] "./.git/objects/bb"
#> [205] "./.git/objects/bc"
#> [206] "./.git/objects/bd"
#> [207] "./.git/objects/be"
#> [208] "./.git/objects/bf"
#> [209] "./.git/objects/c0"
#> [210] "./.git/objects/c1"
#> [211] "./.git/objects/c2"
#> [212] "./.git/objects/c3"
#> [213] "./.git/objects/c4"
#> [214] "./.git/objects/c5"
#> [215] "./.git/objects/c6"
#> [216] "./.git/objects/c7"
#> [217] "./.git/objects/c8"
#> [218] "./.git/objects/c9"
#> [219] "./.git/objects/ca"
#> [220] "./.git/objects/cb"
#> [221] "./.git/objects/cc"
#> [222] "./.git/objects/cd"
#> [223] "./.git/objects/ce"
#> [224] "./.git/objects/cf"
#> [225] "./.git/objects/d0"
#> [226] "./.git/objects/d1"
#> [227] "./.git/objects/d2"
#> [228] "./.git/objects/d3"
#> [229] "./.git/objects/d4"
#> [230] "./.git/objects/d5"
#> [231] "./.git/objects/d6"
#> [232] "./.git/objects/d7"
#> [233] "./.git/objects/d8"
#> [234] "./.git/objects/d9"
#> [235] "./.git/objects/da"
#> [236] "./.git/objects/db"
#> [237] "./.git/objects/dc"
#> [238] "./.git/objects/dd"
#> [239] "./.git/objects/de"
#> [240] "./.git/objects/df"
#> [241] "./.git/objects/e0"
#> [242] "./.git/objects/e1"
#> [243] "./.git/objects/e2"
#> [244] "./.git/objects/e3"
#> [245] "./.git/objects/e4"
#> [246] "./.git/objects/e5"
#> [247] "./.git/objects/e6"
#> [248] "./.git/objects/e7"
#> [249] "./.git/objects/e8"
#> [250] "./.git/objects/e9"
#> [251] "./.git/objects/ea"
#> [252] "./.git/objects/eb"
#> [253] "./.git/objects/ec"
#> [254] "./.git/objects/ed"
#> [255] "./.git/objects/ee"
#> [256] "./.git/objects/ef"
#> [257] "./.git/objects/f0"
#> [258] "./.git/objects/f1"
#> [259] "./.git/objects/f2"
#> [260] "./.git/objects/f3"
#> [261] "./.git/objects/f4"
#> [262] "./.git/objects/f5"
#> [263] "./.git/objects/f6"
#> [264] "./.git/objects/f7"
#> [265] "./.git/objects/f8"
#> [266] "./.git/objects/f9"
#> [267] "./.git/objects/fa"
#> [268] "./.git/objects/fb"
#> [269] "./.git/objects/fc"
#> [270] "./.git/objects/fd"
#> [271] "./.git/objects/ff"
#> [272] "./.git/objects/info"
#> [273] "./.git/objects/pack"
#> [274] "./.git/refs"
#> [275] "./.git/refs/heads"
#> [276] "./.git/refs/remotes"
#> [277] "./.git/refs/remotes/origin"
#> [278] "./.git/refs/tags"
#> [279] "./R"
#> [280] "./.Rproj.user"
#> [281] "./.Rproj.user/8C11DEC8"
#> [282] "./.Rproj.user/8C11DEC8/console06"
#> [283] "./.Rproj.user/8C11DEC8/ctx"
#> [284] "./.Rproj.user/8C11DEC8/explorer-cache"
#> [285] "./.Rproj.user/8C11DEC8/pcs"
#> [286] "./.Rproj.user/8C11DEC8/presentation"
#> [287] "./.Rproj.user/8C11DEC8/profiles-cache"
#> [288] "./.Rproj.user/8C11DEC8/sdb"
#> [289] "./.Rproj.user/8C11DEC8/sdb/per"
#> [290] "./.Rproj.user/8C11DEC8/sdb/per/t"
#> [291] "./.Rproj.user/8C11DEC8/sdb/per/u"
#> [292] "./.Rproj.user/8C11DEC8/sdb/prop"
#> [293] "./.Rproj.user/8C11DEC8/sources"
#> [294] "./.Rproj.user/8C11DEC8/sources/per"
#> [295] "./.Rproj.user/8C11DEC8/sources/per/t"
#> [296] "./.Rproj.user/8C11DEC8/sources/per/u"
#> [297] "./.Rproj.user/8C11DEC8/sources/prop"
#> [298] "./.Rproj.user/8C11DEC8/sources/s-A95D6161"
#> [299] "./.Rproj.user/8C11DEC8/unsaved-notebooks"
#> [300] "./.Rproj.user/8C11DEC8/unsaved-notebooks/20D11D40"
#> [301] "./.Rproj.user/8C11DEC8/unsaved-notebooks/20D11D40/1"
#> [302] "./.Rproj.user/8C11DEC8/unsaved-notebooks/24C613C3"
#> [303] "./.Rproj.user/8C11DEC8/unsaved-notebooks/371A3C3A"
#> [304] "./.Rproj.user/8C11DEC8/unsaved-notebooks/E5C45818"
#> [305] "./.Rproj.user/8C11DEC8/unsaved-notebooks/EFE1DD0F"
#> [306] "./.Rproj.user/8C11DEC8/viewer-cache"
#> [307] "./.Rproj.user/8C11DEC8/viewer_history"
#> [308] "./.Rproj.user/F007D675"
#> [309] "./.Rproj.user/F007D675/console06"
#> [310] "./.Rproj.user/F007D675/ctx"
#> [311] "./.Rproj.user/F007D675/explorer-cache"
#> [312] "./.Rproj.user/F007D675/pcs"
#> [313] "./.Rproj.user/F007D675/presentation"
#> [314] "./.Rproj.user/F007D675/profiles-cache"
#> [315] "./.Rproj.user/F007D675/sources"
#> [316] "./.Rproj.user/F007D675/sources/per"
#> [317] "./.Rproj.user/F007D675/sources/per/t"
#> [318] "./.Rproj.user/F007D675/sources/per/u"
#> [319] "./.Rproj.user/F007D675/sources/prop"
#> [320] "./.Rproj.user/F007D675/viewer-cache"
#> [321] "./.Rproj.user/shared"
#> [322] "./.Rproj.user/shared/notebooks"
#> [323] "./.Rproj.user/shared/notebooks/F56261A3-5_EstruturaDeDados"
#> [324] "./.Rproj.user/shared/notebooks/F56261A3-5_EstruturaDeDados/1"
#> [325] "./.Rproj.user/shared/notebooks/F56261A3-5_EstruturaDeDados/1/s"
#> [326] "./.Rproj.user/shared/notebooks/F9FCB19-6_EntradaDeDados"
#> [327] "./.Rproj.user/shared/notebooks/F9FCB19-6_EntradaDeDados/1"
#> [328] "./.Rproj.user/shared/notebooks/F9FCB19-6_EntradaDeDados/1/8C11DEC8A95D6161"
#> [329] "./.Rproj.user/shared/notebooks/F9FCB19-6_EntradaDeDados/1/s"
#> [330] "./.Rproj.user/shared/notebooks/F9FCB19-6_EntradaDeDados/1/s/c6loelcjbhbrd"
#> [331] "./.Rproj.user/shared/notebooks/F9FCB19-6_EntradaDeDados/1/s/ctvn5nre5lun2"
#> [332] "./rsconnect"
#> [333] "./rsconnect/documents"
#> [334] "./rsconnect/documents/mapa_loc.Rmd"
#> [335] "./rsconnect/documents/mapa_loc.Rmd/rpubs.com"
#> [336] "./rsconnect/documents/mapa_loc.Rmd/rpubs.com/rpubs"
#> [337] "./rsconnect/documents/shapefile2kml.Rmd"
#> [338] "./rsconnect/documents/shapefile2kml.Rmd/rpubs.com"
#> [339] "./rsconnect/documents/shapefile2kml.Rmd/rpubs.com/rpubs"
# lista diretórios, sem sub-dirs
list.dirs(recursive = FALSE)
#> [1] "./data" "./figs" "./.git" "./R"
#> [5] "./.Rproj.user" "./rsconnect"
# lista diretórios incluindo caminho relativo
list.dirs(full.names = TRUE)
#> [1] "."
#> [2] "./data"
#> [3] "./data/Bacia7"
#> [4] "./data/Limites_v2015_20160809"
#> [5] "./data/Limites_v2015_20160809/Limite_v2015_2016-08-03"
#> [6] "./figs"
#> [7] "./.git"
#> [8] "./.git/branches"
#> [9] "./.git/hooks"
#> [10] "./.git/info"
#> [11] "./.git/logs"
#> [12] "./.git/logs/refs"
#> [13] "./.git/logs/refs/heads"
#> [14] "./.git/logs/refs/remotes"
#> [15] "./.git/logs/refs/remotes/origin"
#> [16] "./.git/objects"
#> [17] "./.git/objects/00"
#> [18] "./.git/objects/01"
#> [19] "./.git/objects/02"
#> [20] "./.git/objects/03"
#> [21] "./.git/objects/04"
#> [22] "./.git/objects/05"
#> [23] "./.git/objects/06"
#> [24] "./.git/objects/07"
#> [25] "./.git/objects/08"
#> [26] "./.git/objects/09"
#> [27] "./.git/objects/0a"
#> [28] "./.git/objects/0b"
#> [29] "./.git/objects/0c"
#> [30] "./.git/objects/0d"
#> [31] "./.git/objects/0e"
#> [32] "./.git/objects/0f"
#> [33] "./.git/objects/10"
#> [34] "./.git/objects/11"
#> [35] "./.git/objects/12"
#> [36] "./.git/objects/13"
#> [37] "./.git/objects/14"
#> [38] "./.git/objects/15"
#> [39] "./.git/objects/16"
#> [40] "./.git/objects/17"
#> [41] "./.git/objects/18"
#> [42] "./.git/objects/19"
#> [43] "./.git/objects/1a"
#> [44] "./.git/objects/1b"
#> [45] "./.git/objects/1c"
#> [46] "./.git/objects/1d"
#> [47] "./.git/objects/1e"
#> [48] "./.git/objects/1f"
#> [49] "./.git/objects/20"
#> [50] "./.git/objects/21"
#> [51] "./.git/objects/22"
#> [52] "./.git/objects/23"
#> [53] "./.git/objects/24"
#> [54] "./.git/objects/25"
#> [55] "./.git/objects/26"
#> [56] "./.git/objects/27"
#> [57] "./.git/objects/28"
#> [58] "./.git/objects/29"
#> [59] "./.git/objects/2a"
#> [60] "./.git/objects/2b"
#> [61] "./.git/objects/2c"
#> [62] "./.git/objects/2d"
#> [63] "./.git/objects/2e"
#> [64] "./.git/objects/2f"
#> [65] "./.git/objects/30"
#> [66] "./.git/objects/31"
#> [67] "./.git/objects/32"
#> [68] "./.git/objects/33"
#> [69] "./.git/objects/34"
#> [70] "./.git/objects/35"
#> [71] "./.git/objects/36"
#> [72] "./.git/objects/37"
#> [73] "./.git/objects/38"
#> [74] "./.git/objects/39"
#> [75] "./.git/objects/3a"
#> [76] "./.git/objects/3b"
#> [77] "./.git/objects/3c"
#> [78] "./.git/objects/3d"
#> [79] "./.git/objects/3e"
#> [80] "./.git/objects/3f"
#> [81] "./.git/objects/40"
#> [82] "./.git/objects/41"
#> [83] "./.git/objects/42"
#> [84] "./.git/objects/43"
#> [85] "./.git/objects/44"
#> [86] "./.git/objects/45"
#> [87] "./.git/objects/46"
#> [88] "./.git/objects/47"
#> [89] "./.git/objects/48"
#> [90] "./.git/objects/49"
#> [91] "./.git/objects/4a"
#> [92] "./.git/objects/4b"
#> [93] "./.git/objects/4c"
#> [94] "./.git/objects/4d"
#> [95] "./.git/objects/4e"
#> [96] "./.git/objects/4f"
#> [97] "./.git/objects/50"
#> [98] "./.git/objects/51"
#> [99] "./.git/objects/52"
#> [100] "./.git/objects/53"
#> [101] "./.git/objects/54"
#> [102] "./.git/objects/55"
#> [103] "./.git/objects/56"
#> [104] "./.git/objects/57"
#> [105] "./.git/objects/58"
#> [106] "./.git/objects/59"
#> [107] "./.git/objects/5a"
#> [108] "./.git/objects/5b"
#> [109] "./.git/objects/5c"
#> [110] "./.git/objects/5d"
#> [111] "./.git/objects/5e"
#> [112] "./.git/objects/5f"
#> [113] "./.git/objects/60"
#> [114] "./.git/objects/61"
#> [115] "./.git/objects/62"
#> [116] "./.git/objects/63"
#> [117] "./.git/objects/64"
#> [118] "./.git/objects/65"
#> [119] "./.git/objects/66"
#> [120] "./.git/objects/67"
#> [121] "./.git/objects/68"
#> [122] "./.git/objects/69"
#> [123] "./.git/objects/6a"
#> [124] "./.git/objects/6b"
#> [125] "./.git/objects/6c"
#> [126] "./.git/objects/6d"
#> [127] "./.git/objects/6e"
#> [128] "./.git/objects/6f"
#> [129] "./.git/objects/70"
#> [130] "./.git/objects/71"
#> [131] "./.git/objects/72"
#> [132] "./.git/objects/73"
#> [133] "./.git/objects/74"
#> [134] "./.git/objects/75"
#> [135] "./.git/objects/76"
#> [136] "./.git/objects/77"
#> [137] "./.git/objects/78"
#> [138] "./.git/objects/79"
#> [139] "./.git/objects/7a"
#> [140] "./.git/objects/7b"
#> [141] "./.git/objects/7c"
#> [142] "./.git/objects/7d"
#> [143] "./.git/objects/7e"
#> [144] "./.git/objects/7f"
#> [145] "./.git/objects/80"
#> [146] "./.git/objects/81"
#> [147] "./.git/objects/82"
#> [148] "./.git/objects/83"
#> [149] "./.git/objects/84"
#> [150] "./.git/objects/85"
#> [151] "./.git/objects/86"
#> [152] "./.git/objects/87"
#> [153] "./.git/objects/88"
#> [154] "./.git/objects/89"
#> [155] "./.git/objects/8a"
#> [156] "./.git/objects/8b"
#> [157] "./.git/objects/8c"
#> [158] "./.git/objects/8d"
#> [159] "./.git/objects/8e"
#> [160] "./.git/objects/8f"
#> [161] "./.git/objects/90"
#> [162] "./.git/objects/91"
#> [163] "./.git/objects/92"
#> [164] "./.git/objects/93"
#> [165] "./.git/objects/94"
#> [166] "./.git/objects/95"
#> [167] "./.git/objects/96"
#> [168] "./.git/objects/97"
#> [169] "./.git/objects/98"
#> [170] "./.git/objects/99"
#> [171] "./.git/objects/9a"
#> [172] "./.git/objects/9b"
#> [173] "./.git/objects/9c"
#> [174] "./.git/objects/9d"
#> [175] "./.git/objects/9e"
#> [176] "./.git/objects/9f"
#> [177] "./.git/objects/a0"
#> [178] "./.git/objects/a1"
#> [179] "./.git/objects/a2"
#> [180] "./.git/objects/a3"
#> [181] "./.git/objects/a4"
#> [182] "./.git/objects/a5"
#> [183] "./.git/objects/a6"
#> [184] "./.git/objects/a7"
#> [185] "./.git/objects/a8"
#> [186] "./.git/objects/a9"
#> [187] "./.git/objects/aa"
#> [188] "./.git/objects/ab"
#> [189] "./.git/objects/ac"
#> [190] "./.git/objects/ad"
#> [191] "./.git/objects/ae"
#> [192] "./.git/objects/af"
#> [193] "./.git/objects/b0"
#> [194] "./.git/objects/b1"
#> [195] "./.git/objects/b2"
#> [196] "./.git/objects/b3"
#> [197] "./.git/objects/b4"
#> [198] "./.git/objects/b5"
#> [199] "./.git/objects/b6"
#> [200] "./.git/objects/b7"
#> [201] "./.git/objects/b8"
#> [202] "./.git/objects/b9"
#> [203] "./.git/objects/ba"
#> [204] "./.git/objects/bb"
#> [205] "./.git/objects/bc"
#> [206] "./.git/objects/bd"
#> [207] "./.git/objects/be"
#> [208] "./.git/objects/bf"
#> [209] "./.git/objects/c0"
#> [210] "./.git/objects/c1"
#> [211] "./.git/objects/c2"
#> [212] "./.git/objects/c3"
#> [213] "./.git/objects/c4"
#> [214] "./.git/objects/c5"
#> [215] "./.git/objects/c6"
#> [216] "./.git/objects/c7"
#> [217] "./.git/objects/c8"
#> [218] "./.git/objects/c9"
#> [219] "./.git/objects/ca"
#> [220] "./.git/objects/cb"
#> [221] "./.git/objects/cc"
#> [222] "./.git/objects/cd"
#> [223] "./.git/objects/ce"
#> [224] "./.git/objects/cf"
#> [225] "./.git/objects/d0"
#> [226] "./.git/objects/d1"
#> [227] "./.git/objects/d2"
#> [228] "./.git/objects/d3"
#> [229] "./.git/objects/d4"
#> [230] "./.git/objects/d5"
#> [231] "./.git/objects/d6"
#> [232] "./.git/objects/d7"
#> [233] "./.git/objects/d8"
#> [234] "./.git/objects/d9"
#> [235] "./.git/objects/da"
#> [236] "./.git/objects/db"
#> [237] "./.git/objects/dc"
#> [238] "./.git/objects/dd"
#> [239] "./.git/objects/de"
#> [240] "./.git/objects/df"
#> [241] "./.git/objects/e0"
#> [242] "./.git/objects/e1"
#> [243] "./.git/objects/e2"
#> [244] "./.git/objects/e3"
#> [245] "./.git/objects/e4"
#> [246] "./.git/objects/e5"
#> [247] "./.git/objects/e6"
#> [248] "./.git/objects/e7"
#> [249] "./.git/objects/e8"
#> [250] "./.git/objects/e9"
#> [251] "./.git/objects/ea"
#> [252] "./.git/objects/eb"
#> [253] "./.git/objects/ec"
#> [254] "./.git/objects/ed"
#> [255] "./.git/objects/ee"
#> [256] "./.git/objects/ef"
#> [257] "./.git/objects/f0"
#> [258] "./.git/objects/f1"
#> [259] "./.git/objects/f2"
#> [260] "./.git/objects/f3"
#> [261] "./.git/objects/f4"
#> [262] "./.git/objects/f5"
#> [263] "./.git/objects/f6"
#> [264] "./.git/objects/f7"
#> [265] "./.git/objects/f8"
#> [266] "./.git/objects/f9"
#> [267] "./.git/objects/fa"
#> [268] "./.git/objects/fb"
#> [269] "./.git/objects/fc"
#> [270] "./.git/objects/fd"
#> [271] "./.git/objects/ff"
#> [272] "./.git/objects/info"
#> [273] "./.git/objects/pack"
#> [274] "./.git/refs"
#> [275] "./.git/refs/heads"
#> [276] "./.git/refs/remotes"
#> [277] "./.git/refs/remotes/origin"
#> [278] "./.git/refs/tags"
#> [279] "./R"
#> [280] "./.Rproj.user"
#> [281] "./.Rproj.user/8C11DEC8"
#> [282] "./.Rproj.user/8C11DEC8/console06"
#> [283] "./.Rproj.user/8C11DEC8/ctx"
#> [284] "./.Rproj.user/8C11DEC8/explorer-cache"
#> [285] "./.Rproj.user/8C11DEC8/pcs"
#> [286] "./.Rproj.user/8C11DEC8/presentation"
#> [287] "./.Rproj.user/8C11DEC8/profiles-cache"
#> [288] "./.Rproj.user/8C11DEC8/sdb"
#> [289] "./.Rproj.user/8C11DEC8/sdb/per"
#> [290] "./.Rproj.user/8C11DEC8/sdb/per/t"
#> [291] "./.Rproj.user/8C11DEC8/sdb/per/u"
#> [292] "./.Rproj.user/8C11DEC8/sdb/prop"
#> [293] "./.Rproj.user/8C11DEC8/sources"
#> [294] "./.Rproj.user/8C11DEC8/sources/per"
#> [295] "./.Rproj.user/8C11DEC8/sources/per/t"
#> [296] "./.Rproj.user/8C11DEC8/sources/per/u"
#> [297] "./.Rproj.user/8C11DEC8/sources/prop"
#> [298] "./.Rproj.user/8C11DEC8/sources/s-A95D6161"
#> [299] "./.Rproj.user/8C11DEC8/unsaved-notebooks"
#> [300] "./.Rproj.user/8C11DEC8/unsaved-notebooks/20D11D40"
#> [301] "./.Rproj.user/8C11DEC8/unsaved-notebooks/20D11D40/1"
#> [302] "./.Rproj.user/8C11DEC8/unsaved-notebooks/24C613C3"
#> [303] "./.Rproj.user/8C11DEC8/unsaved-notebooks/371A3C3A"
#> [304] "./.Rproj.user/8C11DEC8/unsaved-notebooks/E5C45818"
#> [305] "./.Rproj.user/8C11DEC8/unsaved-notebooks/EFE1DD0F"
#> [306] "./.Rproj.user/8C11DEC8/viewer-cache"
#> [307] "./.Rproj.user/8C11DEC8/viewer_history"
#> [308] "./.Rproj.user/F007D675"
#> [309] "./.Rproj.user/F007D675/console06"
#> [310] "./.Rproj.user/F007D675/ctx"
#> [311] "./.Rproj.user/F007D675/explorer-cache"
#> [312] "./.Rproj.user/F007D675/pcs"
#> [313] "./.Rproj.user/F007D675/presentation"
#> [314] "./.Rproj.user/F007D675/profiles-cache"
#> [315] "./.Rproj.user/F007D675/sources"
#> [316] "./.Rproj.user/F007D675/sources/per"
#> [317] "./.Rproj.user/F007D675/sources/per/t"
#> [318] "./.Rproj.user/F007D675/sources/per/u"
#> [319] "./.Rproj.user/F007D675/sources/prop"
#> [320] "./.Rproj.user/F007D675/viewer-cache"
#> [321] "./.Rproj.user/shared"
#> [322] "./.Rproj.user/shared/notebooks"
#> [323] "./.Rproj.user/shared/notebooks/F56261A3-5_EstruturaDeDados"
#> [324] "./.Rproj.user/shared/notebooks/F56261A3-5_EstruturaDeDados/1"
#> [325] "./.Rproj.user/shared/notebooks/F56261A3-5_EstruturaDeDados/1/s"
#> [326] "./.Rproj.user/shared/notebooks/F9FCB19-6_EntradaDeDados"
#> [327] "./.Rproj.user/shared/notebooks/F9FCB19-6_EntradaDeDados/1"
#> [328] "./.Rproj.user/shared/notebooks/F9FCB19-6_EntradaDeDados/1/8C11DEC8A95D6161"
#> [329] "./.Rproj.user/shared/notebooks/F9FCB19-6_EntradaDeDados/1/s"
#> [330] "./.Rproj.user/shared/notebooks/F9FCB19-6_EntradaDeDados/1/s/c6loelcjbhbrd"
#> [331] "./.Rproj.user/shared/notebooks/F9FCB19-6_EntradaDeDados/1/s/ctvn5nre5lun2"
#> [332] "./rsconnect"
#> [333] "./rsconnect/documents"
#> [334] "./rsconnect/documents/mapa_loc.Rmd"
#> [335] "./rsconnect/documents/mapa_loc.Rmd/rpubs.com"
#> [336] "./rsconnect/documents/mapa_loc.Rmd/rpubs.com/rpubs"
#> [337] "./rsconnect/documents/shapefile2kml.Rmd"
#> [338] "./rsconnect/documents/shapefile2kml.Rmd/rpubs.com"
#> [339] "./rsconnect/documents/shapefile2kml.Rmd/rpubs.com/rpubs"
# lista todos arquivo que terminam com txt
# "txt$" é uma expressão regular (regex)
list.files(pattern = "txt$")
#> character(0)
list.files(pattern = "txt$|TXT$")
#> character(0)
# arquivos que iniciam com m ou S
list.files(path = ".",pattern = "^[m, S]")
#> [1] "mapa_loc.nb.html" "mapa_loc.Rmd" "my_style.css"
Para ilustrar as funções de manipulação de arquivos e diretórios vamos realizar os seguintes procedimentos:
- Criar um diretório para armazenar dados utilizados no curso até agora;
(new_dir <- file.path("/home", Sys.getenv()[["LOGNAME"]], "dados_adar"))
#> [1] "/home/hidrometeorologista/dados_adar"
if(!dir.exists(new_dir)) dir.create(new_dir)
dir.exists(new_dir)
#> [1] TRUE
- selecionar os arquivos de dados do curso no diretório de trabalho
# lista dos 30 primeiros arquivos no wd
head(all_files <- list.files(recursive = TRUE), 30)
#> [1] "1_Rinstall.html"
#> [2] "1_Rinstall.Rmd"
#> [3] "2_InterfaceUsuario.html"
#> [4] "2_InterfaceUsuario.Rmd"
#> [5] "3_OperacoesBasicas.html"
#> [6] "3_OperacoesBasicas.Rmd"
#> [7] "4_TiposDeDados.html"
#> [8] "4_TiposDeDados.Rmd"
#> [9] "5_EntradaDeDados.Rmd"
#> [10] "5_EstruturaDeDados.html"
#> [11] "5_EstruturaDeDados.md"
#> [12] "5_EstruturaDeDados.Rmd"
#> [13] "6_EntradaDeDados.html"
#> [14] "6_EntradaDeDados.md"
#> [15] "6_EntradaDeDados.Rmd"
#> [16] "7_Programacao.html"
#> [17] "7_Programacao.md"
#> [18] "7_Programacao.Rmd"
#> [19] "8_Datas.html"
#> [20] "8_Datas.md"
#> [21] "8_Datas.Rmd"
#> [22] "9_manipData.html"
#> [23] "9_manipData.md"
#> [24] "9_manipData.Rmd"
#> [25] "A1_linux-cmds-min.nb.html"
#> [26] "A1_linux-cmds-min.Rmd"
#> [27] "A2_rstudio.nb.html"
#> [28] "A2_rstudio.Rmd"
#> [29] "A3_sorteio_nums_aleatorios.nb.html"
#> [30] "A3_sorteio_nums_aleatorios.Rmd"
# extensões dos arquivos de dados usados no curso
extensoes <- c("txt", "TXT", "nc","xls", "bin", "csv", "RData", "rds", "zip", "asc", "dbf", "prj", "sbn", "sbx", "shp", "shx", "db3")
# arquivos de dados do curso selecionados
(sel_files <- all_files[file_ext(all_files) %in% extensoes])
#> [1] "data/06_Junho-00.xls"
#> [2] "data/3B42.140701.09z.7.precipitation.bin"
#> [3] "data/83004_clean.txt"
#> [4] "data/83004_limpo.txt"
#> [5] "data/83004.txt"
#> [6] "data/airquality.txt"
#> [7] "data/aq.txt"
#> [8] "data/Bacia7/Bacia 7.dbf"
#> [9] "data/Bacia7/Bacia 7.prj"
#> [10] "data/Bacia7/Bacia 7.sbn"
#> [11] "data/Bacia7/Bacia 7.sbx"
#> [12] "data/Bacia7/Bacia 7.shp"
#> [13] "data/Bacia7/Bacia 7.shx"
#> [14] "data/Bacia7/Est_Fluviometricas_ANA_2010.dbf"
#> [15] "data/Bacia7/Est_Fluviometricas_ANA_2010.prj"
#> [16] "data/Bacia7/Est_Fluviometricas_ANA_2010.sbn"
#> [17] "data/Bacia7/Est_Fluviometricas_ANA_2010.sbx"
#> [18] "data/Bacia7/Est_Fluviometricas_ANA_2010.shp"
#> [19] "data/Bacia7/Est_Fluviometricas_ANA_2010.shx"
#> [20] "data/Bacia7/Est_Fluviometricas_outras_ent_2010.dbf"
#> [21] "data/Bacia7/Est_Fluviometricas_outras_ent_2010.prj"
#> [22] "data/Bacia7/Est_Fluviometricas_outras_ent_2010.sbn"
#> [23] "data/Bacia7/Est_Fluviometricas_outras_ent_2010.sbx"
#> [24] "data/Bacia7/Est_Fluviometricas_outras_ent_2010.shp"
#> [25] "data/Bacia7/Est_Fluviometricas_outras_ent_2010.shx"
#> [26] "data/Bacia7/Est_Pluviometricas_ANA_2010.dbf"
#> [27] "data/Bacia7/Est_Pluviometricas_ANA_2010.prj"
#> [28] "data/Bacia7/Est_Pluviometricas_ANA_2010.sbn"
#> [29] "data/Bacia7/Est_Pluviometricas_ANA_2010.sbx"
#> [30] "data/Bacia7/Est_Pluviometricas_ANA_2010.shp"
#> [31] "data/Bacia7/Est_Pluviometricas_ANA_2010.shx"
#> [32] "data/Bacia7/Est_Pluviometricas_outras_ent_2010.dbf"
#> [33] "data/Bacia7/Est_Pluviometricas_outras_ent_2010.prj"
#> [34] "data/Bacia7/Est_Pluviometricas_outras_ent_2010.sbn"
#> [35] "data/Bacia7/Est_Pluviometricas_outras_ent_2010.sbx"
#> [36] "data/Bacia7/Est_Pluviometricas_outras_ent_2010.shp"
#> [37] "data/Bacia7/Est_Pluviometricas_outras_ent_2010.shx"
#> [38] "data/Bacia7/Est_Qualidade_ANA_2010.dbf"
#> [39] "data/Bacia7/Est_Qualidade_ANA_2010.prj"
#> [40] "data/Bacia7/Est_Qualidade_ANA_2010.sbn"
#> [41] "data/Bacia7/Est_Qualidade_ANA_2010.sbx"
#> [42] "data/Bacia7/Est_Qualidade_ANA_2010.shp"
#> [43] "data/Bacia7/Est_Qualidade_ANA_2010.shx"
#> [44] "data/Bacia7/Est_Qualidade_outras_ent_2010.dbf"
#> [45] "data/Bacia7/Est_Qualidade_outras_ent_2010.prj"
#> [46] "data/Bacia7/Est_Qualidade_outras_ent_2010.sbn"
#> [47] "data/Bacia7/Est_Qualidade_outras_ent_2010.sbx"
#> [48] "data/Bacia7/Est_Qualidade_outras_ent_2010.shp"
#> [49] "data/Bacia7/Est_Qualidade_outras_ent_2010.shx"
#> [50] "data/Bacia7/Est_Sedimentos_ANA_2010.dbf"
#> [51] "data/Bacia7/Est_Sedimentos_ANA_2010.prj"
#> [52] "data/Bacia7/Est_Sedimentos_ANA_2010.sbn"
#> [53] "data/Bacia7/Est_Sedimentos_ANA_2010.sbx"
#> [54] "data/Bacia7/Est_Sedimentos_ANA_2010.shp"
#> [55] "data/Bacia7/Est_Sedimentos_ANA_2010.shx"
#> [56] "data/Bacia7/Est_Sedimentos_outras_ent_2010.dbf"
#> [57] "data/Bacia7/Est_Sedimentos_outras_ent_2010.prj"
#> [58] "data/Bacia7/Est_Sedimentos_outras_ent_2010.sbn"
#> [59] "data/Bacia7/Est_Sedimentos_outras_ent_2010.sbx"
#> [60] "data/Bacia7/Est_Sedimentos_outras_ent_2010.shp"
#> [61] "data/Bacia7/Est_Sedimentos_outras_ent_2010.shx"
#> [62] "data/Bacia7/Est_Telemetricas_ANA_2010.dbf"
#> [63] "data/Bacia7/Est_Telemetricas_ANA_2010.prj"
#> [64] "data/Bacia7/Est_Telemetricas_ANA_2010.sbn"
#> [65] "data/Bacia7/Est_Telemetricas_ANA_2010.sbx"
#> [66] "data/Bacia7/Est_Telemetricas_ANA_2010.shp"
#> [67] "data/Bacia7/Est_Telemetricas_ANA_2010.shx"
#> [68] "data/Bacia7/Est_Telemetricas_outras_ent_2010.dbf"
#> [69] "data/Bacia7/Est_Telemetricas_outras_ent_2010.prj"
#> [70] "data/Bacia7/Est_Telemetricas_outras_ent_2010.sbn"
#> [71] "data/Bacia7/Est_Telemetricas_outras_ent_2010.sbx"
#> [72] "data/Bacia7/Est_Telemetricas_outras_ent_2010.shp"
#> [73] "data/Bacia7/Est_Telemetricas_outras_ent_2010.shx"
#> [74] "data/Bacia7/Hidrografia 1000000.dbf"
#> [75] "data/Bacia7/Hidrografia 1000000.prj"
#> [76] "data/Bacia7/Hidrografia 1000000.sbn"
#> [77] "data/Bacia7/Hidrografia 1000000.sbx"
#> [78] "data/Bacia7/Hidrografia 1000000.shp"
#> [79] "data/Bacia7/Hidrografia 1000000.shx"
#> [80] "data/Bacia7/Hidrografia 2500000.dbf"
#> [81] "data/Bacia7/Hidrografia 2500000.prj"
#> [82] "data/Bacia7/Hidrografia 2500000.shp"
#> [83] "data/Bacia7/Hidrografia 2500000.shx"
#> [84] "data/Bacia7/Municipios.dbf"
#> [85] "data/Bacia7/Municipios.prj"
#> [86] "data/Bacia7/Municipios.shp"
#> [87] "data/Bacia7/Municipios.shx"
#> [88] "data/Bacia7/Rodovias.dbf"
#> [89] "data/Bacia7/Rodovias.prj"
#> [90] "data/Bacia7/Rodovias.shp"
#> [91] "data/Bacia7/Rodovias.shx"
#> [92] "data/Bacia7/Sedes municipais.dbf"
#> [93] "data/Bacia7/Sedes municipais.prj"
#> [94] "data/Bacia7/Sedes municipais.shp"
#> [95] "data/Bacia7/Sedes municipais.shx"
#> [96] "data/Bacia7/Sub_bacias.dbf"
#> [97] "data/Bacia7/Sub_bacias.prj"
#> [98] "data/Bacia7/Sub_bacias.shp"
#> [99] "data/Bacia7/Sub_bacias.shx"
#> [100] "data/Bacia7.zip"
#> [101] "data/chuva_df.RData"
#> [102] "data/chuva_df.rds"
#> [103] "data/CHUVAS.TXT"
#> [104] "data/cru10min30_tmp.nc"
#> [105] "data/dados_prec.RData"
#> [106] "data/data_inmet_sul_RS.rds"
#> [107] "data/Estações Normal Climatoógica 1981-2010.xls"
#> [108] "data/info_sumary_tair_sul.rds"
#> [109] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Municipio_A.dbf"
#> [110] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Municipio_A.prj"
#> [111] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Municipio_A.sbn"
#> [112] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Municipio_A.sbx"
#> [113] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Municipio_A.shp"
#> [114] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Municipio_A.shx"
#> [115] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Outras_Unid_Protegidas_A.dbf"
#> [116] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Outras_Unid_Protegidas_A.prj"
#> [117] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Outras_Unid_Protegidas_A.sbn"
#> [118] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Outras_Unid_Protegidas_A.sbx"
#> [119] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Outras_Unid_Protegidas_A.shp"
#> [120] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Outras_Unid_Protegidas_A.shx"
#> [121] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Pais_A.dbf"
#> [122] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Pais_A.prj"
#> [123] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Pais_A.sbn"
#> [124] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Pais_A.sbx"
#> [125] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Pais_A.shp"
#> [126] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Pais_A.shx"
#> [127] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Terra_Indigena_A.dbf"
#> [128] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Terra_Indigena_A.prj"
#> [129] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Terra_Indigena_A.sbn"
#> [130] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Terra_Indigena_A.sbx"
#> [131] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Terra_Indigena_A.shp"
#> [132] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Terra_Indigena_A.shx"
#> [133] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Terra_Indigena_P.dbf"
#> [134] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Terra_Indigena_P.prj"
#> [135] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Terra_Indigena_P.sbn"
#> [136] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Terra_Indigena_P.sbx"
#> [137] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Terra_Indigena_P.shp"
#> [138] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Terra_Indigena_P.shx"
#> [139] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Terra_Publica_A.dbf"
#> [140] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Terra_Publica_A.prj"
#> [141] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Terra_Publica_A.sbn"
#> [142] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Terra_Publica_A.sbx"
#> [143] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Terra_Publica_A.shp"
#> [144] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Terra_Publica_A.shx"
#> [145] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Unidade_Conservacao_Nao_Snuc_A.dbf"
#> [146] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Unidade_Conservacao_Nao_Snuc_A.prj"
#> [147] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Unidade_Conservacao_Nao_Snuc_A.sbn"
#> [148] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Unidade_Conservacao_Nao_Snuc_A.sbx"
#> [149] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Unidade_Conservacao_Nao_Snuc_A.shp"
#> [150] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Unidade_Conservacao_Nao_Snuc_A.shx"
#> [151] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Unidade_Federacao_A.dbf"
#> [152] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Unidade_Federacao_A.prj"
#> [153] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Unidade_Federacao_A.sbn"
#> [154] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Unidade_Federacao_A.sbx"
#> [155] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Unidade_Federacao_A.shp"
#> [156] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Unidade_Federacao_A.shx"
#> [157] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Unidade_Protecao_Integral_A.dbf"
#> [158] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Unidade_Protecao_Integral_A.prj"
#> [159] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Unidade_Protecao_Integral_A.sbn"
#> [160] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Unidade_Protecao_Integral_A.sbx"
#> [161] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Unidade_Protecao_Integral_A.shp"
#> [162] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Unidade_Protecao_Integral_A.shx"
#> [163] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Unidade_Protecao_Integral_P.dbf"
#> [164] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Unidade_Protecao_Integral_P.prj"
#> [165] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Unidade_Protecao_Integral_P.sbn"
#> [166] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Unidade_Protecao_Integral_P.sbx"
#> [167] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Unidade_Protecao_Integral_P.shp"
#> [168] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Unidade_Protecao_Integral_P.shx"
#> [169] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Unidade_Uso_Sustentavel_A.dbf"
#> [170] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Unidade_Uso_Sustentavel_A.prj"
#> [171] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Unidade_Uso_Sustentavel_A.sbn"
#> [172] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Unidade_Uso_Sustentavel_A.sbx"
#> [173] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Unidade_Uso_Sustentavel_A.shp"
#> [174] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Unidade_Uso_Sustentavel_A.shx"
#> [175] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Unidade_Uso_Sustentavel_P.dbf"
#> [176] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Unidade_Uso_Sustentavel_P.prj"
#> [177] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Unidade_Uso_Sustentavel_P.sbn"
#> [178] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Unidade_Uso_Sustentavel_P.sbx"
#> [179] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Unidade_Uso_Sustentavel_P.shp"
#> [180] "data/Limites_v2015_20160809/Limite_v2015_2016-08-03/LIM_Unidade_Uso_Sustentavel_P.shx"
#> [181] "data/Limites_v2015_20160809.zip"
#> [182] "data/Ottobacias_Nivel2.dbf"
#> [183] "data/Ottobacias_Nivel2.prj"
#> [184] "data/Ottobacias_Nivel2.sbn"
#> [185] "data/Ottobacias_Nivel2.sbx"
#> [186] "data/Ottobacias_Nivel2.shp"
#> [187] "data/Ottobacias_Nivel2.shx"
#> [188] "data/prec_monthly_UT_Brazil_v2_198001_201312.nc"
#> [189] "data/rastreador1.db3"
#> [190] "data/readme_TRMM.txt"
#> [191] "data/SOI.csv"
#> [192] "data/SOI.txt"
#> [193] "data/x.txt"
- copiar esses arquivos para o novo diretório;
file.copy(from = sel_files,
to = new_dir,
overwrite = TRUE)
#> [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
#> [15] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
#> [29] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
#> [43] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
#> [57] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
#> [71] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
#> [85] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
#> [99] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
#> [113] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
#> [127] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
#> [141] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
#> [155] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
#> [169] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
#> [183] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
- remover alguns arquivos do novo diretório;
# arquivos que começam como "O" ou "S"
files2remove <- list.files(path = new_dir,
pattern = "^[O, S]",
full.names = TRUE)
files2remove
#> [1] "/home/hidrometeorologista/dados_adar/Ottobacias_Nivel2.dbf"
#> [2] "/home/hidrometeorologista/dados_adar/Ottobacias_Nivel2.prj"
#> [3] "/home/hidrometeorologista/dados_adar/Ottobacias_Nivel2.sbn"
#> [4] "/home/hidrometeorologista/dados_adar/Ottobacias_Nivel2.sbx"
#> [5] "/home/hidrometeorologista/dados_adar/Ottobacias_Nivel2.shp"
#> [6] "/home/hidrometeorologista/dados_adar/Ottobacias_Nivel2.shx"
#> [7] "/home/hidrometeorologista/dados_adar/Sedes municipais.dbf"
#> [8] "/home/hidrometeorologista/dados_adar/Sedes municipais.prj"
#> [9] "/home/hidrometeorologista/dados_adar/Sedes municipais.shp"
#> [10] "/home/hidrometeorologista/dados_adar/Sedes municipais.shx"
#> [11] "/home/hidrometeorologista/dados_adar/SOI.csv"
#> [12] "/home/hidrometeorologista/dados_adar/SOI.txt"
#> [13] "/home/hidrometeorologista/dados_adar/Sub_bacias.dbf"
#> [14] "/home/hidrometeorologista/dados_adar/Sub_bacias.prj"
#> [15] "/home/hidrometeorologista/dados_adar/Sub_bacias.shp"
#> [16] "/home/hidrometeorologista/dados_adar/Sub_bacias.shx"
file.remove(files2remove)
#> [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
#> [15] TRUE TRUE
list.files(path = new_dir,
pattern = "^[O, S]",
full.names = TRUE)
#> character(0)
Veja mais funções para manipulação de arquivos em ?connections
.
Para criar arquivos e diretórios temporários podemos usar as funções tempfile()
e tempdir()
, respectivamente. O exemplo abaixo mostra como baixar o arquivo da internet em um arquivo temporário.
tempdir()
#> [1] "/tmp/Rtmpo4G6t9"
tempfile()
#> [1] "/tmp/Rtmpo4G6t9/file3a7e5c1a707c"
# baixando dados da web
arq_temp <- tempfile()
download.file(url = "http://www.cpc.ncep.noaa.gov/data/indices/soi",
destfile = arq_temp)
# lendo arquivo baixado
(soi <- readLines(arq_temp, n = 10))
#> [1] "(STAND TAHITI - STAND DARWIN) SEA LEVEL PRESS "
#> [2] " ANOMALY "
#> [3] " "
#> [4] "YEAR JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC "
#> [5] "1951 2.5 1.5 -0.2 -0.5 -1.1 0.3 -1.7 -0.4 -1.8 -1.6 -1.3 -1.2"
#> [6] "1952 -1.5 -1.0 0.9 -0.4 1.2 1.2 0.8 0.1 -0.4 0.6 0.0 -2.0"
#> [7] "1953 0.5 -0.8 -0.3 0.3 -2.8 0.2 0.0 -2.0 -2.1 0.1 -0.5 -0.8"
#> [8] "1954 1.1 -0.5 0.4 1.1 0.8 0.2 0.7 1.8 0.3 0.4 0.2 2.3"
#> [9] "1955 -0.9 3.1 1.1 -0.2 1.7 2.2 2.6 2.4 2.2 2.5 2.0 1.6"
#> [10] "1956 2.2 2.7 2.2 1.5 2.3 1.8 1.8 2.0 0.1 2.9 0.2 1.8"
# apagando o arquivo tmp
file.remove(arq_temp)
#> [1] TRUE
Pequenas amostras de dados
scan()
readline()
;print()
;cat()
textConnection()
Formato textual
dput()
;dget()
;dump()
;source()
;structure()
Dados de pacotes do R
data()
Arquivos texto
read.table()
;read.csv()
;read.csv2()
;read.fwf()
apply()
write.csv2()
;write.table()
count.fields()
readLines()
;writeLines()
Sys.info()
Dados binários
save()
;load()
readRDS()
;saveRDS()
download.file()
;file.show()
readBin()
Netcdf
- Funções do pacote
ncdf4
:nc_open()
;ncvar_get()
;ncatt_get()
;nc_close()
Dados de outros softwares
read.dbf()
;read.matlab()
do pacoteR.matlab
Excel
loadWorkbook()
;getSheets()
;readWorksheet()
;writeWorksheet()
do pacoteXLConnect
Bancos de dados
dbDriver()
;dbConnect()
;dbListTables()
;dbReadTable()
;dbDisconnect()
;dbUnloadDriver()
do pacoteDBI
Shapefiles
shapefile()
do pacoteraster
Manipulação de diretórios e arquivos
getwd()
;setwd()
R.home()
;.libPaths()
file.path()
dirname()
;basename()
;tools::file_ext()
file.choose()
;file.info()
file.exists()
;exists()
dir()
;list.dirs()
;list.files()
dir.create()
;file.copy()
;file.remove()
tempdir()
;tempfile()
Funções gráficas
image.plot()
do pacotefields
rev()
;topo.colors()
;levelplot()
;brewer.pal()
do pacoteRColorBrewer
Próximo: [Programação](https://rawgit.com/jdtatsch/adar-ufsm/master/7_Programacao.html)
Footnotes
-
Para uma descrição mais abrangente sobre importação e exportação de dados no R consulte a documentação de cada função e o manual R Data Import/Export. ↩