将Excel文件导入R,xlsx或xls

nol*_*ugo 85 xls r xlsx

请有人帮助我将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")
Run Code Online (Sandbox Code Playgroud)

要么

AB<-read.xlsx("C:/AB_DNA_Tag_Numbers.xlsx",1)
Run Code Online (Sandbox Code Playgroud)

但我得到错误:

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

谢谢.

Ben*_*Ben 95

对于没有繁琐的外部依赖*的解决方案,现在有readxl:

readxl包使得从Excel和R中获取数据变得容易.与许多现有的包(例如gdata,xlsx,xlsReadWrite)相比,readxl没有外部依赖性,因此很容易在所有操作系统上安装和使用.它旨在处理存储在单个工作表中的表格数据.

Readxl支持传统.xls格式和现代基于xml的.xlsx格式.使用libxls C库可以实现.xls支持,它可以抽象出底层二进制格式的许多复杂性.要解析.xlsx,我们使用RapidXML C++库.

它可以像这样安装:

install.packages("readxl") # CRAN version
Run Code Online (Sandbox Code Playgroud)

要么

devtools::install_github("hadley/readxl") # development version
Run Code Online (Sandbox Code Playgroud)

用法

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")
Run Code Online (Sandbox Code Playgroud)

*并非严格来说,它需要Rcpp,而后者又需要Rtools(对于Windows)或Xcode(对于OSX),它们是R外部的依赖项.但它们不需要任何摆弄路径等,所以这是一个优于Java和Perl依赖项.

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


Ian*_*ows 35

您可能还想尝试XLConnect包.我的运气比xlsx好(加上它也可以读取.xls文件).

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

此外,如果您在找不到文件时遇到问题,请尝试使用file.choose()选择它.

  • 而不是`readWorksheet(loadWorkbook(...))`你可以用`readWorksheetFromFile(...)`更简洁地做同样的事情. (7认同)

Ben*_*ker 22

我肯定会read.xlsgdata包中尝试这个功能,它比xlsx包更加成熟.它可能需要Perl ......


Rei*_*son 20

更新

由于下面的答案现在有点过时,我只是提请注意readxl包.如果Excel表格格式良好/已经存在,那么我现在将使用readxl从工作簿中读取.如果工作表格式不佳/已经存在,那么我仍然会导出到CSV,然后通过read.csv()或简单处理R中的问题readLines().

原版的

我首选的方法是将单个Excel工作表保存为逗号分隔值(CSV)文件.在Windows上,这些文件与Excel关联,因此您不会丢失双击 - 打开Excel"功能".

CSV文件可以使用read.csv(),或者,如果您在某个位置或使用设置了某些欧洲设置的计算机(,用作小数位),则可以使用read.csv2().

这些函数具有合理的默认值,可以简单地读取格式正确的文件.只需在第一行或第一列中保留样本或变量的任何标签.

将文件存储在CSV中的附加好处是,由于文件是纯文本,因此可以非常轻松地传递它们,并且您可以确信它们将在任何地方打开; 一个不需要Excel来查看或编辑数据.

  • 我确实说将单张纸保存为CSV文件 - 因为这些是纯文本,工作表的大小无关紧要.如果您坚持使用Excel工作簿,那么用于读取R中数据的可用选项将变得更加复杂 - 请参阅RODBC,RDCOM等替代方案.最后,如果您确定已按照说明使用`read.xlsx()`**并且**具有该软件包的最新版本和R,则通过电子邮件发送软件包维护人员来报告潜在的错误. (7认同)
  • csv无济于事,因为工作簿包含多个工作表,每个工作表最多有100k行.谢谢 (6认同)

pet*_*ner 18

例2012:

library("xlsx")
FirstTable <- read.xlsx("MyExcelFile.xlsx", 1 , stringsAsFactors=F)
SecondTable <- read.xlsx("MyExcelFile.xlsx", 2 , stringsAsFactors=F)
Run Code Online (Sandbox Code Playgroud)
  • 我会尝试'xlsx'包,因为它很容易处理,看起来足够成熟
  • 对我来说很好,并且不需要像Perl或其他任何附加功能

示例2015:

library("readxl")
FirstTable  <- read_excel("MyExcelFile.xlsx", 1)
SecondTable <- read_excel("MyExcelFile.xlsx", 2)
Run Code Online (Sandbox Code Playgroud)
  • 如今我用它readxl并且已经用它做了很好的经验.
  • 不需要额外的东西
  • 很好的表现


Roc*_*nce 14

这个新包看起来不错http://cran.r-project.org/web/packages/openxlsx/openxlsx.pdf 它不需要rJava并且使用'Rcpp'来提高速度.


小智 5

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

此外,每个人都应该清楚csv和txt文件更容易使用,但生活并不容易,有时你只需要打开一个xlsx.


Hen*_*ata 5

对我来说 openxlx 包以最简单的方式工作。

install.packages("openxlsx")
library(openxlsx)
rawData<-read.xlsx("your.xlsx");
Run Code Online (Sandbox Code Playgroud)