将Excel文件导入R,xlsx或xls


89

请有人帮我将excel 2007(.xlsx)文件导入R的最佳方法。我尝试了几种方法,但似乎都无效。我已经升级到2.13.1,Windows XP,xlsx 0.3.0,我不知道为什么错误不断出现。我试过了:

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

要么

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

但我得到了错误:

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

谢谢。


4
您这样做多少次?如果只是一次,则几乎总是最好使用Excel导出为更开放的格式,例如.csv
阿里·弗里德曼

gsk3:是的,还是Google文档(自09年以来一直支持Excel 2007导入):google.com/support/forum/p/Google%20Docs/…(希望目前效果很好。)
本杰明·阿特金

6
这是什么版本的R?什么操作系统?什么版本的read.xlsx?您阅读过发布指南吗?</ ripleybot>
Spacedman 2011年

2
您能解释一下这个问题与stackoverflow.com/questions/6099243/…
追逐

9
您已检查R实际能够找到该文件,例如file.exists("C:/AB_DNA_Tag_Numbers.xlsx")
本·博克

Answers:


101

对于没有复杂的外部依赖*的解决方案,现在有readxl

readxl软件包使从Excel到R的数据获取变得容易。与许多现有软件包(例如gdata,xlsx,xlsReadWrite)相比,readxl没有外部依赖关系,因此易于在所有操作系统上安装和使用。它旨在与存储在一张纸中的表格数据一起使用。

Readxl支持旧版.xls格式和现代的基于xml的.xlsx格式。libxls C库使.xls支持成为可能,该库抽象出了基础二进制格式的许多复杂性。要解析.xlsx,我们使用RapidXML C ++库。

可以这样安装:

install.packages("readxl") # CRAN version

要么

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

用法

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

*并非完全正确,它需要Rcpppackage,而后者又需要Rtools(对于Windows)或Xcode(对于OSX),它们是R外部的依赖项。但是它们不需要任何摆弄路径等事情,因此这是一个优于Java和Perl依赖项。

更新现在有rexcel软件包。这有望从Excel文件获取R格式的Excel格式,函数和许多其他类型的信息。


35

您可能还需要尝试XLConnect软件包。我的运气比xlsx好(而且它也可以读取.xls文件)。

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

另外,如果找不到文件时遇到麻烦,请尝试使用file.choose()选择它。


7
而不是readWorksheet(loadWorkbook(...))您可以更简洁地完成此操作readWorksheetFromFile(...)

这适用于我的其中一个麻烦的工作表,其中的read.xlsx崩溃了,并带有“ java.lang.IllegalArgumentException:单元格索引必须> = 0”
ski_squaw 2015年

23

我肯定会尝试软件包中的read.xls功能,该功能gdataxlsx软件包要成熟得多。可能需要Perl ...


21

更新资料

由于下面的答案现在已经有些过时了,我只是提请注意readxl软件包。如果Excel工作表的格式正确/没有格式,那么我现在将使用readxl从工作簿中进行读取。如果工作表的格式不正确/无法布局,那么我仍将导出为CSV,然后通过via read.csv()或plain old 处理R中的问题readLines()

原版的

我的首选方法是将各个Excel工作表保存在逗号分隔值(CSV)文件中。在Windows上,这些文件与Excel相关联,因此您不会丢失双击Excel中的“功能”。

可以使用read.csv()或将CSV文件读入R ,如果您在某个地方或使用设置了某些欧洲设置的计算机(其中,用作小数点的位置),则可以使用read.csv2()

这些功能具有明智的默认设置,使读取格式正确的文件变得简单。只需将样本或变量的所有标签保留在第一行或第一列即可。

将文件存储为CSV的其他好处是,由于文件是纯文本格式,因此可以很容易地传递它们,并且您可以确信它们将在任何地方打开。不需要Excel即可查看或编辑数据。


6
由于该工作簿包含多个工作表,每个工作表最多可容纳10万行,因此csv将无济于事。谢谢
nolyugo 2011年

7
我确实说过将单个工作表另存为CSV文件-因为这些是纯文本,所以工作表的大小无关紧要。如果您坚持使用Excel工作簿,则用于将数据读取到R中的可用选项将变得更加复杂-有关替代方法,请参见软件包RODBC,RDCOM。最后,如果您确定已遵循使用说明read.xlsx() 拥有该软件包和R的最新版本,请通过电子邮件向软件包维护者发送报告潜在错误的信息。
加文·辛普森

它实际上取决于操作系统之间所需的数据和互操作性水平。一旦您的标签或要素中出现非ASCII字符,并且需要跨Mac / Win / Lin工作,如果您从excel导入导出或从excel导入,则会出现各种怪异现象。Excel无法正常处理utf-8(或csv)。因此,在那种情况下,您要么留在Excel中,要么移至其他电子表格应用程序(后者并不总是可能的)。
FvD 2014年

18

范例2012:

library("xlsx")
FirstTable <- read.xlsx("MyExcelFile.xlsx", 1 , stringsAsFactors=F)
SecondTable <- read.xlsx("MyExcelFile.xlsx", 2 , stringsAsFactors=F)
  • 我会尝试使用“ xlsx”软件包,因为它易于处理并且看起来足够成熟
  • 对我来说很好用,不需要像Perl之类的其他任何东西

范例2015:

library("readxl")
FirstTable  <- read_excel("MyExcelFile.xlsx", 1)
SecondTable <- read_excel("MyExcelFile.xlsx", 2)
  • 如今,我使用它readxl并已经获得了很好的经验。
  • 不需要额外的东西
  • 很棒的表演


5

如果您遇到相同的问题,并且R给您一个错误-找不到函数“ .jnew”-只需安装库rJava。或者,如果您已经拥有它,则只需运行行库(rJava)。那应该是问题。

另外,每个人都应该清楚,csv和txt文件更易于使用,但是生活并不轻松,有时您只需要打开xlsx。


1
当我加载版本2.8.2时,gdata我收到启动消息,gdata: read.xls support for 'XLSX' (Excel 2007+) files ENABLED.听起来像应该打开xlsx文件,尽管我承认我最近没有对其进行测试……
Ben Bolker,2012年

1
我可以确认gdata版本2.8.2 xlsx使用该read.xls功能读取文件。
2012年

4

在意识到xlxs软件包尚未针对R 3.1.0更新之后,我最近发现了Schaun Wheeler的将excel文件导入R的功能。

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

文件名必须具有“ .xlsx”扩展名,并且在运行该函数时无法打开该文件。

此功能对于访问其他人的工作非常有用。使用read.csv函数的主要优点是

  • 导入多个Excel文件
  • 导入大文件
  • 定期更新的文件

使用read.csv函数需要手动打开和保存每个Excel文档,这既耗时又很无聊。因此,使用Schaun的功能来自动化工作流程是一个巨大的帮助。

Schaun对此解决方案的大力支持。



2

您的操作系统是什么?您正在运行哪个版本的R:32位或64位?您安装了什么版本的Java?

刚开始使用该read.xlsx()功能时,我遇到了类似的错误,发现我的问题(可能与您的问题或可能与您的问题无关;至少,此响应也应被视为“也尝试此问题”)与不兼容有关。 64位Java的.xlsx pacakge。我相当确定.xlsx软件包需要32位Java。

使用32位R,并确保已安装32位Java。这可以解决您的问题。


2

您已检查R是否实际上可以找到该文件,例如file.exists(“ C:/AB_DNA_Tag_Numbers.xlsx”)吗?–本·博克(Ben Bolker)2011年8月14日23:05

以上评论应该已经解决了您的问题:

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

之后应该可以正常工作。


1

如果导出到OpenDocument Spreadsheet文件(ods)或更旧的Excel格式并使用上述ODS阅读器或Excel阅读器导入,则可以保留多个选项卡和更多格式信息。


1

正如这里许多人所说,我在写同样的东西,但有一点要补充!

首先,我们需要确保我们的R Studio安装了以下两个软件包:

  1. “ readxl”
  2. “ XLConnect”

为了在R中加载包,您可以使用以下功能:

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

搜索将显示R Studio中可用的当前软件包列表。

现在另一个问题是,即使您可能具有这两个软件包,但在读取“ xlsx”文件时仍然可能遇到问题,并且错误可能类似于“错误:列数多于列名”

要解决此问题,您只需将excel工作表“ xlsx”重新保存到

“ CSV(逗号分隔)”

这样您的生活将变得异常轻松。

玩得开心!!


1

我对以上所有答案都做了非常努力的尝试。但是,它们实际上并没有帮助,因为我使用了Mac。在里约热内卢库有这个导入功能它基本上可以输入任何类型的数据文件到Rstudio使用英语以外的语言,即使是那些文件!

请尝试以下代码:

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

希望有帮助。有关更多详细信息,请参见:https : //cran.r-project.org/web/packages/rio/vignettes/rio.html

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.