97

请有人可以帮助我将 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

15 回答 15

115

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

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

Readxl 支持传统的 .xls 格式和现代的基于 xml 的 .xlsx 格式。.xls 支持通过 libxls C 库实现,它抽象了底层二进制格式的许多复杂性。为了解析 .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,而 package 又需要 Rtools(对于 Windows)或 Xcode(对于 OSX),它们是 R 外部的依赖项。但它们不需要任何摆弄路径等,所以这是一个优于 Java 和 Perl 依赖项。

更新现在有rexcel包。这保证了从 Excel 文件中获取 Excel 格式、函数和许多其他类型的信息并进入 R。

于 2015-03-19T07:11:34.240 回答
35

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

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

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

于 2012-04-09T21:05:00.863 回答
23

我肯定会尝试包read.xls中的功能gdata,它比xlsx包更成熟。它可能需要 Perl ...

于 2011-08-14T23:06:45.123 回答
21

更新

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

原来的

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

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

这些函数具有合理的默认值,使读取适当格式化的文件变得简单。只需在第一行或第一列中保留样本或变量的任何标签。

以 CSV 存储文件的额外好处是,由于文件是纯文本,因此可以非常轻松地传递它们,并且您可以确信它们会在任何地方打开;无需 Excel 即可查看或编辑数据。

于 2011-08-13T08:17:13.493 回答
20

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它并取得了很好的经验。
  • 不需要额外的东西
  • 很棒的表演
于 2012-09-25T10:31:19.907 回答
14

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

于 2014-04-22T03:37:47.510 回答
5

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

另外,大家应该清楚csv和txt文件更容易使用,但生活并不容易,有时你只需要打开一个xlsx。

于 2012-04-09T19:35:43.610 回答
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 为这个解决方案提供了很大的支持。

于 2014-05-28T06:45:49.977 回答
4

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

install.packages("openxlsx")
library(openxlsx)
rawData<-read.xlsx("your.xlsx");
于 2015-06-26T13:16:18.447 回答
2

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

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

使用 32 位 R 并确保安装了 32 位 Java。这可能会解决您的问题。

于 2013-09-06T18:49:51.150 回答
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) 

之后应该可以正常工作。

于 2015-01-07T12:46:59.447 回答
2

我已经非常努力地尝试了上面的所有答案。但是,它们实际上并没有帮助,因为我使用的是 mac。rio 库有这个导入功能,基本上可以将任何类型的数据文件导入 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

于 2018-04-02T18:51:59.520 回答
1

如果您导出到 OpenDocument 电子表格文件 ( ods ) 或较旧的 Excel 格式并使用ODS 阅读器或您上面提到的 Excel 阅读器将其导入,您可能能够保留多个选项卡和更多格式信息。

于 2011-08-13T08:22:04.780 回答
1

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

首先,我们需要确保我们的 R Studio 安装了这两个包:

  1. “阅读”
  2. “XL连接”

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

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

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

现在另一个问题,即使您可能拥有这两个包,但在读取“xlsx”文件时仍然可能遇到问题,错误可能类似于“错误:比列名更多的列”

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

“CSV(逗号分隔)”

你的生活会超级轻松......

玩得开心!!

于 2016-05-27T08:30:19.863 回答
0

安装 xlsx 包需要 rJava 和 xlsxjars。间接地,它们需要系统上的特定(32 位或 64 位)java 运行时环境。

优点read.xlsx:在同一个包中有read.xlsxwrite.xlsx

缺点:非常低的速度

如建议的那样,简单的方法是从 excel 以 .csv 格式保存。

5800x15 数据集(中位数)的简单基准测试

  1. 读取.xlsx:>10000 毫秒
  2. 读取 xlsx:70 毫秒
  3. 读取.csv:15 毫秒
于 2021-11-30T14:55:05.133 回答