Importando arquivos Excel para R, xlsx ou xls

89

Por favor, alguém pode me ajudar sobre a melhor maneira de importar um arquivo excel 2007 (.xlsx) para R. Eu tentei vários métodos e nenhum parece funcionar. Eu atualizei para 2.13.1, Windows XP, xlsx 0.3.0, não sei por que o erro continua aparecendo. Eu tentei:

AB<-read.xlsx("C:/AB_DNA_Tag_Numbers.xlsx","DNA_Tag_Numbers")

OU

AB<-read.xlsx("C:/AB_DNA_Tag_Numbers.xlsx",1)

mas recebo o erro:

 Error in .jnew("java/io/FileInputStream", file) : 
  java.io.FileNotFoundException: C:\AB_DNA_Tag_Numbers.xlsx (The system cannot find the file specified)

Obrigado.

Nolyugo
fonte
4
Quantas vezes você está fazendo isso? Pelo menos uma vez, é quase sempre melhor usar o Excel para exportar para um formato mais aberto, como .csv.
Ari B. Friedman
gsk3: Sim, ou Google Docs, que tem suporte de importação do Excel 2007 desde 2009: google.com/support/forum/p/Google%20Docs/… (Espero que agora funcione bem.)
Benjamin Atkin
6
Que versão de R é essa? Qual sistema operacional? Qual versão do read.xlsx? Você leu o guia de postagem? </ripleybot>
Spacedman
2
Você pode explicar como essa pergunta é diferente de stackoverflow.com/questions/6099243/…
Chase
9
Você verificou se R é realmente capaz de localizar o arquivo, por exemplo file.exists("C:/AB_DNA_Tag_Numbers.xlsx")?
Ben Bolker

Respostas:

101

Para uma solução livre de dependências externas complicadas *, agora existe readxl:

O pacote readxl facilita a obtenção de dados do Excel e para o R. Comparado com muitos dos pacotes existentes (por exemplo, gdata, xlsx, xlsReadWrite), readxl não tem dependências externas, portanto é fácil de instalar e usar em todos os sistemas operacionais. Ele é projetado para trabalhar com dados tabulares armazenados em uma única folha.

Readxl suporta o formato .xls legado e o formato .xlsx moderno baseado em xml. O suporte a .xls é possível com a biblioteca C com libxls, que abstrai muitas das complexidades do formato binário subjacente. Para analisar .xlsx, usamos a biblioteca RapidXML C ++.

Ele pode ser instalado assim:

install.packages("readxl") # CRAN version

ou

devtools::install_github("hadley/readxl") # development version

Uso

library(readxl)

# read_excel reads both xls and xlsx files
read_excel("my-old-spreadsheet.xls")
read_excel("my-new-spreadsheet.xlsx")

# Specify sheet with a number or name
read_excel("my-spreadsheet.xls", sheet = "data")
read_excel("my-spreadsheet.xls", sheet = 2)

# If NAs are represented by something other than blank cells,
# set the na argument
read_excel("my-spreadsheet.xls", na = "NA")

* não é estritamente verdadeiro, requer o Rcpppacote , que por sua vez requer Rtools (para Windows) ou Xcode (para OSX), que são dependências externas a R. Mas eles não requerem qualquer manipulação de caminhos, etc., então isso é um vantagem sobre as dependências Java e Perl.

Atualizar Agora existe o pacote rexcel . Isso promete obter a formatação, funções e muitos outros tipos de informações do Excel do arquivo do Excel para o R.

Ben
fonte
35

Você também pode tentar o pacote XLConnect. Tive mais sorte do que o xlsx (além disso, ele pode ler arquivos .xls também).

library(XLConnect)
theData <- readWorksheet(loadWorkbook("C:/AB_DNA_Tag_Numbers.xlsx"),sheet=1)

também, se você está tendo problemas com o seu arquivo não sendo encontrado, tente selecioná-lo com file.choose ().

Ian Fellows
fonte
7
Em vez de readWorksheet(loadWorkbook(...))fazer o mesmo de maneira um pouco mais sucinta com readWorksheetFromFile(...).
Hugh
Isso funcionou em uma de minhas planilhas problemáticas em que read.xlsx travou com "java.lang.IllegalArgumentException: Cell index must be> = 0"
ski_squaw
23

Eu definitivamente tentaria a read.xlsfunção no gdatapacote, que é consideravelmente mais madura do que o xlsxpacote. Pode exigir Perl ...

Ben Bolker
fonte
21

Atualizar

Como a resposta abaixo está um pouco desatualizada, gostaria de chamar a atenção para o pacote readxl . Se a planilha do Excel estiver bem formatada / deitada , eu usaria readxl para ler a pasta de trabalho. Se as folhas estiverem mal formatadas / dispostas, eu ainda exportaria para CSV e lidaria com os problemas no R via read.csv()ou simples readLines().

Original

Minha maneira preferida é salvar planilhas individuais do Excel em arquivos de valores separados por vírgula (CSV). No Windows, esses arquivos são associados ao Excel para que você não perca o "recurso" clique duplo para abrir no Excel.

Os arquivos CSV podem ser lidos em R usando read.csv(), ou, se você estiver em um local ou usando um computador configurado com algumas configurações europeias (onde ,é usado como a casa decimal), usando read.csv2().

Essas funções têm padrões sensíveis que simplificam a leitura de arquivos formatados apropriadamente. Basta manter todos os rótulos de amostras ou variáveis ​​na primeira linha ou coluna.

Os benefícios adicionais de armazenamento de arquivos em CSV são que, como os arquivos são texto simples, podem ser passados ​​facilmente e você pode ter certeza de que eles serão abertos em qualquer lugar; não é necessário Excel para examinar ou editar os dados.

Gavin Simpson
fonte
6
O csv não ajudaria, pois a pasta de trabalho contém várias planilhas e cada uma tem até 100 mil linhas. Obrigado
nolyugo
7
Eu disse salvar as planilhas individuais como arquivos CSV - como são texto simples, o tamanho das planilhas é irrelevante. Se você insiste em trabalhar com pastas de trabalho do Excel, as opções disponíveis para ler os dados em R tornam-se muito mais complexas - consulte os pacotes RODBC, RDCOM para alternativas. Finalmente, se você tem certeza de que seguiu as instruções para usar read.xlsx() e tem as versões mais recentes desse pacote e R, envie um e-mail ao mantenedor do pacote para relatar um bug em potencial.
Gavin Simpson
Realmente depende dos dados e do nível de interoperabilidade que você precisa entre os sistemas operacionais. Assim que não houver ASCII em seus rótulos ou fatores E você precisar trabalhar em Mac / Win / Lin, várias estranhezas começarão a ocorrer se você exportar / importar de e para o Excel. O Excel não consegue lidar com utf-8 normalmente (ou csv). Nesse caso, você fica no Excel ou muda para um aplicativo de planilha diferente (o último nem sempre é possível).
FvD
18

Exemplo 2012:

library("xlsx")
FirstTable <- read.xlsx("MyExcelFile.xlsx", 1 , stringsAsFactors=F)
SecondTable <- read.xlsx("MyExcelFile.xlsx", 2 , stringsAsFactors=F)
  • Eu tentaria o pacote 'xlsx' porque é fácil de manusear e parece maduro o suficiente
  • funcionou bem para mim e não precisava de nenhum adicional como Perl ou qualquer outro

Exemplo 2015:

library("readxl")
FirstTable  <- read_excel("MyExcelFile.xlsx", 1)
SecondTable <- read_excel("MyExcelFile.xlsx", 2)
  • hoje uso readxle tenho uma boa experiência com ele.
  • nenhum material extra necessário
  • Boa performance
Petermeissner
fonte
14

Este novo pacote parece bom http://cran.r-project.org/web/packages/openxlsx/openxlsx.pdf Ele não requer rJava e está usando 'Rcpp' para velocidade.

RockScience
fonte
e está em desenvolvimento ativo
RockScience
1
Estou trabalhando com algumas pastas de trabalho do Excel bem grandes e o openxlxs é praticamente o único que pode lidar com arquivos tão grandes.
Jose R
Infelizmente, requer "rtools"
Ferdi
@Ferdi. acho que não! Basta criar o pacote uma vez. Não para uso posterior.
RockScience
5

Se você está tendo o mesmo problema e R está apresentando um erro - não foi possível encontrar a função ".jnew" - Basta instalar a biblioteca rJava. Ou se você já tem, basta executar a biblioteca de linha (rJava). Esse deve ser o problema.

Além disso, deve estar claro para todos que os arquivos csv e txt são mais fáceis de trabalhar, mas a vida não é fácil e às vezes você só precisa abrir um xlsx.

Wilmer E Henao
fonte
1
quando carrego a versão 2.8.2 gdatarecebo a mensagem de inicialização gdata: read.xls support for 'XLSX' (Excel 2007+) files ENABLED.Parece-me que deveria abrir arquivos xlsx, embora reconheço que não testei recentemente ...
Ben Bolker
1
Posso confirmar que a gdataversão 2.8.2 lê xlsxarquivos com a read.xlsfunção.
Ben
4

Recentemente, descobri a função de Schaun Wheeler para importar arquivos do Excel para o R depois de perceber que o pacote xlxs não foi atualizado para o R 3.1.0.

https://gist.github.com/schaunwheeler/5825002

O nome do arquivo precisa ter a extensão ".xlsx" e o arquivo não pode ser aberto ao executar a função.

Esta função é muito útil para acessar o trabalho de outras pessoas. As principais vantagens sobre o uso da função read.csv são quando

  • Importando vários arquivos Excel
  • Importando arquivos grandes
  • Arquivos que são atualizados regularmente

Usar a função read.csv requer a abertura manual e o salvamento de cada documento Excel, o que é demorado e muito enfadonho. Usar a função de Schaun para automatizar o fluxo de trabalho é, portanto, uma grande ajuda.

Grandes adereços para Schaun para esta solução.

Jonno Bourne
fonte
4

Para mim, o pacote openxlx funcionou da maneira mais fácil.

install.packages("openxlsx")
library(openxlsx)
rawData<-read.xlsx("your.xlsx");
Henrik Bata
fonte
2

Qual é o seu sistema operacional? Qual versão do R você está executando: 32 bits ou 64 bits? Qual versão do Java você instalou?

Eu tive um erro semelhante quando comecei a usar a read.xlsx()função e descobri que meu problema (que pode ou não estar relacionado ao seu; no mínimo, esta resposta deve ser vista como "tente isso também") estava relacionado à incompatibilidade de .xlsx pacakge com Java de 64 bits. Tenho quase certeza de que o pacote .xlsx requer Java de 32 bits.

Use R de 32 bits e certifique-se de que o Java de 32 bits esteja instalado. Isso pode resolver o seu problema.

user2755425
fonte
2

Você verificou se R é realmente capaz de encontrar o arquivo, por exemplo, file.exists ("C: /AB_DNA_Tag_Numbers.xlsx")? - Ben Bolker, 14 de agosto de 11 às 23:05

O comentário acima deveria ter resolvido seu problema:

require("xlsx")
read.xlsx("filepath/filename.xlsx",1) 

deve funcionar bem depois disso.

contradição
fonte
1

Você pode manter várias guias e mais informações de formatação se exportar para um arquivo de planilha OpenDocument ( ods ) ou um formato Excel mais antigo e importá-lo com o leitor ODS ou o leitor Excel mencionado acima.

Benjamin Atkin
fonte
1

Conforme declarado por muitos aqui, estou escrevendo a mesma coisa, mas com um ponto adicional!

Primeiramente, precisamos nos certificar de que nosso R Studio tenha estes dois pacotes instalados:

  1. "readxl"
  2. "XLConnect"

Para carregar um pacote em R, você pode usar a função abaixo:

install.packages("readxl/XLConnect")
library(XLConnect)
search()

a pesquisa exibirá a lista de pacotes atuais disponíveis em seu R Studio.

Agora, outro problema, mesmo que você possa ter esses dois pacotes, mas ainda possa encontrar problemas ao ler o arquivo "xlsx" e o erro pode ser como "erro: mais colunas do que o nome da coluna"

Para resolver este problema, você pode simplesmente salvar novamente sua planilha Excel "xlsx" em

"CSV (delimitado por vírgulas)"

e sua vida vai ser super facil ....

Diverta-se!!

Rajeev Kumar Barnwal
fonte
1

Eu tentei muito com todas as respostas acima. No entanto, eles realmente não ajudaram porque eu usei um mac. A biblioteca rio possui esta função de importação que pode basicamente importar qualquer tipo de arquivo de dados para o Rstudio , mesmo aqueles arquivos em outros idiomas além do Inglês!

Experimente os códigos abaixo:

    library(rio)
    AB <- import("C:/AB_DNA_Tag_Numbers.xlsx")
    AB <- AB[,1]

Espero esta ajuda. Para referências mais detalhadas: https://cran.r-project.org/web/packages/rio/vignettes/rio.html

Suyang Xu
fonte