7 Dados no R

Pode-se entrar com dados no R de diferentes formas. O formato mais adequado vai depender do tamanho do conjunto de dados, e se os dados já existem em outro formato para serem importados ou se serão digitados diretamente no R.

A seguir são descritas formas de entrada de dados com indicação de quando cada uma das formas deve ser usada. Os três primeiros casos são adequados para entrada de dados diretamente no R, os seguintes descreve como importar dados já disponíveis eletronicamentede um arquivo texto, em outro sistema ou no próprio R.

7.1 Entrando com dados diretamento no R

7.1.1 Definindo vetores

Podemos entrar com dados definindo vetores com o comando c() ("c" corresponde a concatenate) ou usando funções que criam vetores. Veja e experimente com os seguinte exemplos.

  > a1 <- c(2, 5, 8)
  > a1

  [1] 2 5 8

  > a2 <- c(23, 56, 34, 23, 12, 56)
  > a2

  [1] 23 56 34 23 12 56

Esta forma de entrada de dados é conveniente quando se tem um pequeno número de dados.

Quando os dados tem algum "padrão" tal como elementos repetidos, números sequenciais pode-se usar mecanismos do R para facilitar a entrada dos dados como vetores. Examine os seguintes exemplos.

  > a3 <- 1:10
  > a3

   [1]  1  2  3  4  5  6  7  8  9 10

  > a4 <- (1:10) * 10
  > a4

   [1]  10  20  30  40  50  60  70  80  90 100

  > a5 <- rep(3, 5)
  > a5

  [1] 3 3 3 3 3

  > a6 <- rep(c(5, 8), 3)
  > a6

  [1] 5 8 5 8 5 8

  > a7 <- rep(c(5, 8), each = 3)
  > a7

  [1] 5 5 5 8 8 8

7.1.2 Usando a função scan()

Esta função lê dados diretamento do console, isto é, coloca o R em modo prompt onde o usuário deve digitar cada dado seguido da tecla <ENTER>. Para encerrar a entrada de dados basta digitar <ENTER> duas vezes consecutivas. Veja o seguinte resultado:

  y <- scan()
  #1: 11
  #2: 24
  #3: 35
  #4: 29
  #5: 39
  #6: 47
  #7:
  #Read 6 items
  
  > y
  [1] 11 24 35 29 39 47

Este formato é mais ágil que o anterior e é conveniente para digitar vetores longos. Esta função pode também ser usada para ler dados de um arquivo ou conexão, aceitando inclusive endereços de URL’s (endereços da web) o que iremos mencionar me mais detalhes mais adiante.

Corrigindo e/ou alterando dados Suponha que tenhamos digitado algum dado errado que desejamos corrigir. Por exemplo, suponha que o correto seja 25 no lugar de 35. Para corrigir basta selecionar a posição do dado atribuindo o valor correto

  > y[3] <- 25
  > y

  [1] 11 24 25 29 39 47

Vejamos ainda um outro exemplo onde todo dado acima de 30 tem seu valor alterado para 30.

  > y[y >= 30] <- 30
  > y

  [1] 11 24 25 29 30 30

7.1.3 Usando a função edit()

O comando edit(data.frame()) abre uma planilha para digitação de dados que são armazanados como data-frames. Data-frames são o análogo no R à uma planilha.

Portanto digitando

  a8 <- edit(data.frame())

será aberta uma planilha na qual os dados devem ser digitados. Quando terminar de entrar com os dados note que no canto superior direito da planilha existe um botão <QUIT>. Pressionando este botão a planilha será fechada e os dados serão gravados no objeto indicado (no exemplo acima no objeto a8).

Se voce precisar abrir novamente planilha com os dados, para fazer correções e/ou inserir mais dados use o comando fix(). No exemplo acima voce digitaria fix(a8).

Esta forma de entrada de dados é adequada quando voce tem dados que não podem ser armazenados em um único vetor, por exemplo quando há dados de mais de uma variável para serem digitados.

7.2 Lendo dados de um arquivo texto

Se os dados já estão disponíveis em formato eletrônico, isto é, já foram digitados em outro programa, voce pode importar os dados para o R sem a necessidade de digitá-los novamente.

A forma mais fácil de fazer isto é usar dados em formato texto (arquivo do tipo ASCII). Por exemplo, se seus dados estão disponíveis em uma planilha eletrônica como EXCEL ou similar, voce pode na planilha escolher a opção <SALVAR COMO> e gravar os dados em um arquivo em formato texto.

No R usa-se scan() mencionada anteriormente, ou então a função mais flexível read.table() para ler os dados de um arquivo texto e armazenar no formato de uma data-frame.

Exemplo 1: Como primeiro exemplo considere importar para o R os dados deste arquivo texto. Clique no link para visualizar o arquivo. Agora copie o arquivo para sua área de trabalho (working directory do R). Para importar este arquivo usamos:

  ex01 <- read.table("gam01.txt")
  ex01

Exemplo 2: Como primeiro exemplo considere importar para o R os dados deste arquivo texto. Clique no link para visualizar o arquivo. Agora copie o arquivo para sua área de trabalho (working directory do R).

Note que este arquivo difere do anterior em um aspecto: os nomes das variáveis estão na primeira linha. Para que o R considere isto corretamente temos que informá-lo disto com o argumento head=T. Portanto para importar este arquivo usamos:

  ex02 <- read.table("exemplo02.txt", head=T)
  ex02

Exemplo 3: Como primeiro exemplo considere importar para o R os dados deste arquivo texto. Clique no link para visualizar o arquivo. Agora copie o arquivo para sua área de trabalho (working directory do R).

Note que este arquivo difere do primeiro em outros aspectos: além dos nomes das variáveis estarem na primeira linha, os campos agora não são mais separados por tabulação e sim por :. Alm disto os caracteres decimais estão separados por vírgula, sendo que o R usa ponto pois é um programa escrito em língua inglesa. Portanto para importar corretamente este arquivo usamos então os argumentos sep e dec:

  ex03 <- read.table("dadosfic.csv", head=T, sep=":", dec=",")
  ex03

Para maiores informações consulte a documentação desta função com ?read.table.

Embora read.table() seja provavelmente a função mais utilizada existem outras que podem ser úteis e determinadas situações.

Exemplo 4: As funções permitem ler ainda dados diretamente disponíveis na web. Por exemplo os dados do Exemplo 1 poderiam ser lidos diretamente com o comando a seguir, sem a necessidade de copiar primeiro os dados para algum local no computador do usuário.:

  > read.table("http://www.leg.ufpr.br/~paulojus/dados/gam01.txt")

7.3 Importando dados de outros programas

É possível ler dados diretamente de outros formatos que não seja texto (ASCII). Isto em geral é mais eficiente e requer menos memória do que converter para formato texto. Há funções para importar dados diretamente de EpiInfo, Minitab, S-PLUS, SAS, SPSS, Stata, Systat e Octave. Além disto é comum surgir a necessidade de importar dados de planilhas eletrônicas. Muitas funções que permitem a importação de dados de outros programas são implementadas no pacote foreign.

  > require(foreign)

  [1] TRUE

A seguir listamos (mas não todas!) algumas destas funções

Para mais detalhes consulte a documentação de cada função e/ou o manual R Data Import/Export.

7.4 Carregando dados já disponíveis no R

Para carregar conjuntos de dados que são já disponibilizados com o R use o comando data(). Por exemplo, abaixo mostramos como carregar o conjunto mtcars que está no pacote datasets e depois como localizar e carregar o conjunto de dados topo.

  > data(mtcars)
  > head(mtcars)

                     mpg cyl disp  hp drat    wt  qsec vs am gear carb
  Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
  Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
  Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
  Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
  Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
  Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

  > find("topo")

  character(0)

  > require(MASS)

  [1] TRUE

  > data(topo)
  > head(topo)

      x   y   z
  1 0.3 6.1 870
  2 1.4 6.2 793
  3 2.4 6.1 755
  4 3.6 6.2 690
  5 5.7 6.2 800
  6 1.6 5.2 800

O conjunto mtcars está no pacote datasets que é carregado automaticamente quando iniciamos o R, portanto os dados estão prontamente disponíveis. Ao carregar os dados é criado um objeto mtcars no seu "workspace".

Já o conjunto topo está no pacote MASS que não é automaticamente carregado ao iniciar o Re portanto deve ser carregado com require() para depois podermos acessar os dados.

A função data() pode ainda ser usada para listar os conjutos de dados disponíveis. A primeira chamada a seguir lista os conjuntos de dados dos pacotes carregados. A segunda lista os conjuntos de dados de um pacote específico (no exemplo do pacote nlme.

  data()
  data(package="nlme")

7.5 Acesso a planilhas e bancos de dados relacionais

É comum que dados estajam armazenados em planilhas eletrônicas tais como MS-Excel ou OpenOffice Spreadsheet. Nestes caso, embora seja possível exportar a partir destes aplicativos os dados para o formato texto para depois serem lidos no R, possivelmente com read.table(), pode ser necessário ou conveniente ler os dados diretamente destes formato. Vamos colocar aqui algumas opções para importar dados do MS-Excel para o R.

Estruturas de dados mais complexas são tipicamente armazenadas em acronymDBMS’s (database management system) ou acronymRDBMS’s (ralational database management system). Aguns exemplos são Oracle, Microsoft SQL server, MySQL, PostgreSQL, Microsoft Access, dentre outros. O R possuiu ferramentas implementadas em pacotes para acesso a estes sistemas gerenciadores.

Para mais detalhes consulte o manual R Data Import/Export e a documentação dos pacotes que implemental tal funcionalidade. Alguns deles disponíveis por ocasião da redação deste texto são: RODBC, DBI, RMySQL, RPostgreSQL, ROracle, RNetCDF, RSQLite, dentre outros.