个性化阅读
专注于IT技术分析

读取Excel文件并将其导入R

点击下载

本文概述

读取Excel文件并将其导入R1

Excel与R的连接是什么?

众所周知, Excel是Microsoft开发的电子表格应用程序。它是一种易于使用的工具, 用于组织, 分析和存储表中的数据, 并且已在全世界许多不同的应用领域中广泛使用。 R实施了一些读取, 写入和操作Excel文件(通常是电子表格)的方法, 这并不奇怪。

本教程有关将Excel文件读取和导入到R中, 将概述用于导入Excel文件和R的不同扩展名的电子表格时存在的一些选项。本文介绍了R中的基本命令和专用软件包。同时, 将解决将Excel文件和电子表格加载到R中时可能会遇到的一些最常见问题。

想更深入地潜水吗?查阅有关使用R导入数据的srcmini课程, 其中有一章介绍如何导入Excel数据。

步骤

  1. 你的数据
  2. 准备数据集
  3. R的准备工作
  4. 将电子表格和文件加载到R中
    1. 基本的R命令
      1. read.table()
      2. read.table()的特例
    2. 配套
      1. XLConnect
      2. xlsx软件包
      3. gdata包
      4. Readxl软件包
  5. 最后检查
  6. 那里又回来

步骤1。你的数据

本教程最终涉及的是数据:你希望将其快速有效地导入R。因此, 第一步, 在你的个人计算机上存储数据是一个好主意。

基本上有两种方法可以执行此操作:要么拥有自己的数据集, 要么从Internet下载一个数据集。

如果你打算在导入后彻底分析数据, 则后者可能会有些挑战, 因为你将需要保持尽可能完整和定性的数据集!

  • 当你不确定在Internet上何处查找数据时, 以下列表可能会很有用。对于本教程, 请确保保存在Internet上找到的任何文件扩展名都可以用Excel打开的数据。
  • 另一个选择是Quandl, 它是数字数据的搜索引擎。它提供了数百万个免费和开放的财务, 经济和社交数据集, 并且可能被证明是一个更简单的选择, 特别是对于尚未熟悉数据分析领域的初学者而言。你可以在此处签出并使用Quandl。

提示:如果你是初级R程序员, 则可以阅读我们的教程, 该教程不仅说明了如何导入和操作Quandl数据集, 还为你提供了交互式练习, 以使你慢慢地融入Quandl。

第二步。准备数据集

最佳实践

在开始考虑如何将Excel文件和电子表格加载到R中之前, 你需要首先确保准备好数据导入。如果你忽略了此操作, 则在使用将在第三步中介绍的R函数时, 你可能会遇到问题。

以下是一些最佳做法的列表, 这些最佳做法可帮助你避免将Excel文件和电子表格读取到R中时遇到的任何问题:

  • 电子表格的第一行通常是为标题保留的, 而第一列则用于标识采样单位。
  • 避免名称, 值或带有空格的字段。否则, 每个单词将被解释为一个单独的变量, 从而导致与数据集中每行元素数相关的错误;
  • 如果要连接单词, 请插入.。例如:

Sepal.Length
  • 短名称优先于长名称。
  • 尽量避免使用包含符号的名称, 例如?, $, %, ^, &, *, (, ), -, #, ?、、 <, >, /, |, \, [, ], {, 和};
  • 删除你在Excel文件中所做的所有注释, 以避免将多余的列或NA添加到文件中;和
  • 确保数据集中的任何缺失值都用NA表示。

保存数据

确保你的数据保存在Excel中。这使你可以在以后重新访问数据以进行编辑, 添加更多数据或更改它们, 并保留可用于计算数据的公式等。

Microsoft Excel提供了许多保存文件的选项:除了默认扩展名.xls或.xlsx, 你还可以转到”文件”选项卡, 单击”另存为”, 然后选择列为”另存为类型”的扩展名之一。选项。

保存数据集的最常见扩展名是.csv和.txt(作为制表符分隔的文本文件)。根据你选择的保存选项, 数据集的字段由制表符或逗号分隔。这些符号然后称为数据集的”字段分隔符”。

第三步R的准备工作

将数据集保存在Excel中后, 仍然需要在R中设置工作目录。

为此, 请尝试首先找出此时你的工作目录所在的位置:


getwd()

然后, 可能是你想要更改返回的路径, 使其包含你存储数据集的文件夹:


setwd("<location of your dataset>")

通过执行此命令, R现在可以准确知道你正在使用哪个文件夹。

第四步。将电子表格和文件加载到R中

在将数据集保存到Excel中并调整了工作空间之后, 你终于可以开始将文件真正导入R了!

这可以通过两种方式发生:通过基本的R命令或通过程序包。浏览这两个选项, 发现哪个选项对你来说最简单, 最快。

基本的R命令

以下命令都是R’s Utils软件包的一部分, 该软件包是核心和内置软件包之一, 其中包含实用程序功能的集合。你将看到这些基本功能着重于将Excel电子表格放入R中, 而不是Excel文件本身。

如果你对后者更感兴趣, 请向下滚动一点, 以发现专门为此目的设计的软件包。

read.table()

如第二步中所述, Excel提供了许多用于保存数据集的选项, 其中之一是制表符分隔的文本文件或* .txt文件。

如果数据是这样保存的, 则可以使用最简单, 最通用的选项之一将文件导入R:read.table()函数。


df <- read.table("<FileName>.txt", header = TRUE)

你在read.table()函数的第一个参数中填入文本文件的名称, 该文本文件的名称应在””及其扩展名之间, 而在第二个参数标题中指定你的excel文件的名称在第一行还是第一行。标头参数的TRUE值为默认值。

请记住, 通过执行setwd()R可以知道你在哪个文件夹中工作。这意味着你也可以只将文件名写为read.table()函数的参数, 而无需指定文件位置, 如下所示:


df <- read.table("<FileName>.txt", header = TRUE)

请注意, 此功能的字段分隔符设置为””或空格, 因为它适用于以制表符分隔的.txt文件, 该文件根据制表符分隔字段。实际上, 此处的空格不仅表示一个或多个空格, 还表示制表符, 换行符或回车符。

但是, 如果文件使用另一个符号来分隔数据集的字段(如以下数据集), 该怎么办?


1/6/12:01:03/0.50/WORST
2/16/07:42:51/0.32/ BEST
3/19/12:01:29/0.50/"EMPTY"
4/13/03:22:50/0.14/INTERMEDIATE
5/8/09:30:03/0.40/WORST

你可以通过将sep参数添加到read.table()函数来轻松地表明这一点:

strip.white参数允许你指示是否要删除未引用字符字段中的空格。仅当已指定sep且仅采用逻辑值时才使用它。 na.strings指示应将哪些字符串解释为NA值。在这种情况下, 字符串” EMPTY”将被解释为NA值。

你会看到在删除第二行的BEST类之前的多余空白, 这是由于sep参数的名称使列完美地分开了, 并且在第三行中用” EMPTY”表示的空值已被替换为NA 。小数点没有引起任何问题, 因为”。”是read.table()的默认值。

最后, 由于你的数据集没有标题, R为它提供了一些属性, 即V1, V2, V3, V4和V5。

请注意, 如果遇到类似” readTableHeader在…上发现最后一行不完整的警告”之类的警告, 请尝试通过将光标移至文件中最后一行的末尾并按Enter键来添加行尾(EOL)字符。保存文件, 然后尝试再次导入文件;通常, 警告应得到解决。

read.table()的特例

以下选项是通用read.table()函数的特殊情况。这意味着此函数中使用的任何参数都可以应用于本节中描述的所有函数, 反之亦然。

这些变体与read.table()几乎相同, 并且仅在三个方面与之不同:

  • 分隔符;
  • header参数始终设置为TRUE, 表示正在读取的文件的第一行包含带有变量名称的标头;
  • fill参数也设置为TRUE, 这意味着如果行的长度不相等, 则将隐式添加空白字段。

提示:有关可以在所有四个函数中使用的所有可能参数的完整概述, 请访问Rdocumentation页面。

read.csv()和read.csv2()

read.csv()和read.csv2()函数通常用于将数据集保存为.csv或逗号分隔值的Excel。如前所述, read.csv()和read.csv2()具有另一个分隔符:前者是逗号, 而后者使用分号。

提示:通过在文本编辑器(例如TextEdit或Notepad)中打开.csv文件, 可以找出分隔符是什么。

例如, 此数据集…


1;6;12:01:03;0, 50;WORST
2;16;07:42:51;0, 32;BEST
3;19;12:01:29;0, 50;BEST
4;13;03:22:50;0, 14;INTERMEDIATE
5;8;09:30:03;0, 40; WORST 

…以及.csv文件:


1, 6, 12:01:03, 0.50, WORST
2, 16, 07:42:51, 0.32, BEST
3, 19, 12:01:29, 0.50, BEST
4, 13, 03:22:50, 0.14, INTERMEDIATE
5, 8, 09:30:03, 0.40, WORST

请记住, 默认情况下, 两个函数的header和fill参数都设置为TRUE。

要读取使用逗号作为分隔符的.csv文件, 可以使用read.csv()函数, 如下所示:

请注意, quote参数表示你的文件是否使用某个符号作为引号:在上面的命令中, 你将\”或ASCII引号(“)传递给quote参数, 以确保R将使用的符号考虑在内引用字符。

对于具有类似于本示例数据集第五栏中显示的值的数据集, 这尤其方便。你可以清楚地看到双引号已被用来引用CLASS变量的字符值。

stringsAsFactors参数允许你指定是否应将字符串转换为因子。默认值设置为FALSE。

请记住, 如果你在R中指定了工作目录, 则不必键入文件的位置。

对于使用分号分隔字段的文件, 请使用read.csv2()函数:

请注意, dec参数允许你指定小数点的字符。请确保为你的文件指定此选项。否则, 你的值将被解释为单独的分类变量!

col.names参数由连接向量中列名称的c()函数完成, 它指定第一行中的列名称。如果你的文件没有标题行, R会使用默认的变量名V1, V2, …等。col.names可以覆盖此默认值并分配变量名。同样, 参数row.names在数据集的第一列中指定观察名称。

上面的命令导入以下数据集:


1;6;12:01:03;0, 50;"WORST"
2;16;07:42:51;0, 32;"BEST"
3;19;12:01:29;0, 50
4;13;03:22:50;0, 14; INTERMEDIATE
5;8;09:30:03;0, 40;"WORST"

你会看到通过col.names和row.names参数为列和行指定了名称, 所有字段都清楚地分开了, 由于fill = TRUE, 第三不相等的行用空白字段填充了。就像在strip.white参数中指定的一样, 删除了带引号的空白字符。最后, 由于为stringsAsFactors参数提供了” TRUE”值, 因此将字符串作为因素导入。

你在运行str(df)时最后检查一次。

注意, 用于完成row.names或col.names参数的向量必须与数据集的长度相同!

read.delim()和read.delim2()

就像read.csv()函数一样, read.delim()和read.delim2()是read.table()函数的变体。

请记住, 它们还与read.table()函数几乎相同, 不同之处在于它们假定正在读取的第一行是带有属性名称的标题, 而它们使用制表符代替分隔符空格, 逗号或分号。它们还将fill参数设置为TRUE, 这意味着空白字段将添加到长度不等的行中。

考虑以下数据集:


1/6/12:01:03/0.50/"WORST"
2/16/07:42:51/0.32/"BEST"
3/19/12:01:29/0.50
4/13/03:22:50/0.14/ INTERMEDIATE
5/8/09:30:03/0.40/ WORST 

你可以使用read.delim()导入此数据集, 例如:

请注意, 此函数使用小数点作为小数点, 如:3.1415。 nrows参数指定应仅读取五行原始数据。最后, 如果没有另外指定, 则使用as.is抑制数据中变量子集的因子转换:只需为参数提供不想转换的列的索引向量, 例如上述命令中的命令, 或者给出长度等于读取的列数的逻辑向量。如果参数为TRUE, 则到处都会抑制因子转换。

请记住, 因子是只能包含有限数量的不同值的变量。因此, 它们通常被称为分类变量。

你将得到以下结果:


  V1 V2       V3   V4           V5
O  3 19 12:01:29 0.50             
P  4 13 03:22:50 0.14 INTERMEDIATE
Q  5  8 09:30:03 0.40        WORST

由于read.delim()设置为处理小数点, 因此你已经怀疑存在另一种处理带有小数点逗号的文件的方法。

稍有不同的函数read.delim2()可以用于这些文件:

请注意, read.delim2()函数使用十进制逗号作为十进制标记。使用小数逗号的示例是3, 1415。

提示:有关小数点用法的更多有趣信息(如googleVis可视化效果所示), 请阅读我们的博客文章。

在上面的函数中, skip参数指定不将数据集的前两行读入R。其次, colClasses允许你为数据集的所有列指定类的向量。在这种情况下, 数据集必须提供列, 其中前两个类型为整数, 两次复制类”整数”, 第二个复制”日期”, 第三个复制”数字”, 最后, 复制第四个”字符” 。前两个列的整数类型的复制由rep参数指示。此外, 分隔符已定义为” \ t”, 这是指定水平制表符的转义代码。

上面定义的read.delim2()函数已应用于以下数据集, 你还在上面的练习中使用了该数据集:


ID  SCORE  TIME DECIMAL TIME    CLASS
1   6   12:01:03    0.50    WORST
2   16  07:42:51    0.32    BEST
3   19  12:01:29    0.50    
4   13  03:22:50    0.14    "EMPTY"
5   8   09:30:03    0.40    WORST

但是, 当你尝试强制将第三列作为日期读入时, 会出现错误。它看起来像这样:


Error in methods::as(data[[i]], colClasses[i]) : 
  no method or default for coercing "character" to "date"

换句话说, 当执行上面的read.delim()函数时, time属性被解释为类型字符, 不能转换为” date”。

造成这种解释的原因可能是由于未定义日期, 因此该数据集中仅给出了小时, 分钟和秒。

最重要的是, 它们以特殊格式提供, 这种格式不被视为标准格式。

这就是为什么你可以通过在colClasses参数中将” date”替换为” character”来更好地将其作为字符读入的原因, 然后运行以下命令:

请注意, 在决定使用特定的时间和日期表示法的情况下, 就像上面的数据集一样, 使用as.POSIXct()函数可以指定自己的格式。还要注意, 当你检查str(df)的结果时, 你的数据类型将是所需的。

自己做

你也可以编写自己的函数来导入.csv和.txt文件。使用function()执行此操作:


df <- function(x) read.delim(x)

接下来, 你可以定义一个新函数read.delim(), 该函数将x作为参数。然后, 你要确保x将使用指向你的数据集的路径来完成:

如果你想将前面的两个步骤结合在一起以避免输入驱动器, 目录或文件的扩展名, 那么你已经在第一步中定义了read.delim()函数的一些参数:


df <- function(x) read.delim(paste("<location of the file's folder>", x, ".txt", sep=""))
df("<Your file's name>")

在这种情况下, 你已经在read.delim()中连接了文件的文件夹x的位置, 文件的扩展名和字段分隔符。每次你要导入文件时, 这都节省了一些时间, 因为你只需要填写x:这只是文件名, 没有扩展名, 因为你已经在函数的定义中指定了它。

提示:不要忘记在函数的第一个参数后面加上/!进一步阅读以了解更多有关为何如此重要的信息。

请注意, sep参数指示函数read.delim()的分隔符, 而不是数据集的分隔符。这就是为什么上面的功能仅适用于制表符分隔的文本文件的原因。例如, 如果要导入扩展名为.csv的文件, 可以使用以下方法执行此操作:


df <- function(x) read.delim(paste("<location of the file's folder>", x, ".txt", sep=""), sep=", ")
df("<Your file's name>")

请记住, 传递给read.table()函数的参数也可以在read.csv(), read.csv2(), read.delim()和read.delim2()中使用。

你可以看到在原始函数中添加了另一个sep参数, 这是read.delim()函数本身而不是paste()函数的参数:它不指定有关文件位置的任何内容, 但用于指定如何读取文件。

为了更清楚地了解这一点, 请尝试使用以下命令, 其中省略了第二个sep参数:


df <- function(x) read.delim(paste("<location of the file's folder>", x, ".txt", sep=", "))
df("<Your file's name>")

你肯定会得到一个与你所引用的文件路径有关的错误:扩展名加上名称, 以及可能放在函数中的路径用逗号分隔, 很可能是导致此错误的原因。 。

这个例子清楚地说明了手头的问题:


In file(file, "rt") :
  cannot open file 'C:/Users/SomeonesName/Desktop, iris, .txt': No such file or directory

你会看到文件路径中包含两个逗号而不是空格。 R永远不会理解这种类型的路径。你需要在文件文件夹的位置添加一个斜杠, 同时将分隔符字段字符调整为空格以解决此错误。

提示:你可以通过添加第二个sep参数相同的方式来添加更多参数, 从而为原始函数提供更多规范。

配套

你不仅可以通过基本的R命令导入文件, 还可以通过加载软件包然后使用软件包的功能来导入文件。实际上, 任何R用户都限制使用基本的R命令来节省时间和精力。

进一步的工作空间准备

请记住, 如果你确实想遵循这种方法, 则需要安装软件包:你需要在设置工作目录之后, 在控制台中输入任何其他命令之前立即执行此操作。你可以简单地输入以下内容:


install.packages("<name of the package>")

完成安装后, 只需键入以下内容即可将软件包激活到你的工作空间中:


library("<name of the package>")

要检查你是否已经安装了软件包, 请输入以下内容:


any(grepl("<name of your package>", installed.packages()))

XLConnect

XLConnect是”用于从R内操纵Microsoft Excel文件的全面的跨平台R包”。你可以利用函数来创建Excel工作簿, 并根据需要创建多个工作表, 然后将数据导入其中。通过以下方式将现有的Excel文件读入R:


df <- readWorksheetFromFile("<file name and extension>", sheet=1, startRow = 4, endCol = 2)

sheet参数指定你确切要导入到R中的图纸。你还可以添加更多规范, 例如startRow或startCol指示应从哪个行或列中导入数据集, 或者endRow或endCol指示直到该点为止你也可以在其中读取数据。参数区域允许你指定一个范围, 例如A5:B5, 以指示开始和结束的行和列。

另外, 你还可以使用loadWorkbook()函数加载整个工作簿, 然后通过readWorksheet()读入希望作为R数据框显示的工作表:


# Load in Workbook
wb <- loadWorkbook("<name and extension of your file>")
# Load in Worksheet
df <- readWorksheet(wb, sheet=1) 

当然, sheet不是可以传递给readWorksheet()的唯一参数。如果你想了解有关程序包或可传递给readWorkSheetFromFile()函数或所提及的两个替代函数的所有参数的更多信息, 则可以访问程序包的RDocumentation页面。

xlsx软件包

这是第二个包, 可用于在R中加载Excel文件。读取文件的功能与基本read.table()或其变体相同:


df <- read.xlsx("<name and extension of your file>", sheetIndex = 1)

请注意, 有必要在此功能中添加工作表名称或工作表索引。在上面的示例中, 分配了Excel文件的第一张纸。

如果你有更大的数据集, 则在使用read.xlsx2()函数时可能会获得更好的性能:


df <- read.xlsx2("<name and extension of your file>", sheetIndex = 1, startRow=2, colIndex = 2)

有趣的事实:根据包装信息, 该功能可以在具有100, 000个或更多单元的纸张上更快地实现一个数量级的性能。这是因为此函数在Java中做更多的工作。

请注意, 上面的命令与你可以在XLConnect包的readWorkSheetFromFile()中使用的命令完全相同, 并且它指定你从第二行开始读取数据集。此外, 你可能想要指定endRow, 或者可以将自己限制为colIndex和rowIndex来指示要提取的行和列。

与XLConnect一样, xlsx包不仅可以读取数据, 还可以做更多的事情:它还可以用于将数据帧写入Excel工作簿并将数据进一步处理到这些文件中。如果你还想将数据框写入Excel工作簿, 则可以只使用write.xlsx()和write.xlsx2()。

注意与read.xlsx()和read.xlsx2()的类比!

例如:


write.xlsx(df, "df.xlsx", sheetName="Data Frame")

该功能要求你首先指定要导出的数据框。在第二个参数中, 指定要输出的文件的名称。

请注意, 此文件将出现在你指定为工作目录的文件夹中。

但是, 如果要将数据帧写到已经存在的文件中, 则可以执行以下命令:


write.xlsx(df, "<name and extension of your existing file>", sheetName="Data Frame"
           append=TRUE)

请注意, 除了更改输出文件的名称之外, 还添加了参数append来指示应将数据框工作表添加到给定文件中。

有关此软件包及其功能的更多详细信息, 请转到此页面。

gdata包

该程序包提供了另一个跨平台的解决方案, 可以将Excel文件加载到R中。它包含各种数据处理工具, 其中read.xls()函数的用法如下:


df <- read.xls("<name of your file.xls>", perl="<location of perl.exe file on your pc")

read.xls()函数将命名的Excel文件转换为临时.csv或.tab文件, 在此过程中使用Perl。

Perl是一种编程语言, 代表”实用提取和报告语言”。它是Linux和MAC OS X的标准配置。如果你使用Windows, 但尚未在计算机上安装它, 则可以在此处下载ActiveState Perl。有关如何填写perl参数的更多信息, 请访问此页面。

请注意, 你不需要知道如何使用Perl, 只需要能够在计算机上检索其位置即可! 🙂

尽管该函数似乎通过引用.xls明确地将目标指向Excel电子表格的较早版本, 但是它也接受.xlsx文件作为输入。

请注意, 实际上, 只有在Perl的工作版本不在可执行搜索路径中时, 才需要在perl参数中指定确切的Perl路径才能执行此命令而不会提示任何错误。换句话说, 当执行read.xls()函数时, R搜索Excel文件的路径, 并希望在途中找到Perl。

如果不是这种情况, R将返回错误。可能的完成看起来像这样, 例如:


df <- read.xls("iris.xls", sheet=1, perl="C:/Perl/bin/perl.exe")

此程序包还提供其他功能, 例如xls2sep()及其包装器xls2csv(), xls2tab()和xls2tsv()分别返回.csv, .tab, .tsv文件或任何其他指定格式的临时文件。

这些功能与read.xls()完全相同:


df <- xls2csv("<name of your file>.xls", sheet = 1, na.strings = "EMPTY", perl="<location of Perl>")

此函数df的输出将包含.xls或.xlsx文件的第一张纸的临时.csv文件, 其字符串S” EMPTY”定义为NA值。随后, 你可以使用适合于读取扩展名为.csv的文件的任何以前的功能来读取此临时文件, 例如read.csv():


df <- read.csv(df)

请注意, read.xls(), xls2sep()及其包装程序的所有其他参数与用于read.table()的参数相同。这些参数的默认值设置为read.csv()的默认值:标头和填充参数默认设置为TRUE, 分隔符为”, “。

如果要确保read.xls()函数支持哪些文件格式, 可以使用xlsFormats()函数:


xlsFormats(perl="<location of Perl>")

readxl软件包

Hadley Wickham的2016年readxl软件包是最近加入.xlsx和.xls数据导入库的人。通过利用R建立的RapidXML C ++库, readxl可以提高将excel文档加载到R的速度和便捷性。

由于不需要任何外部代码库(例如:java jdk或ActiveState PERL), 因此设置非常简单。

此外, 由于readxl软件包已经捆绑到越来越基础的tidyverse软件包中, 因此, 更新一代的R用户可能会高兴地发现, 他们已经安装了他们所需的一切, 可以轻松地开始使用excel文档!

无论你已经安装了tidyverse(包含readxl的dplyr, tidyr和ggplot2库的套件), 还是选择从CRAN或GitHub安装单独的readxl软件包, 你仍然需要按名称显式加载readxl库-因为它不是tidyverse软件包的核心之一。

足够简单:在脚本的开头, 只需将library(readxl)添加到要加载的库列表中。

readxl的函数和参数非常简单明了。要在excel工作表的第一个选项卡中进行阅读, 只需将文件名括在read_excel()函数中即可。


df <- read_excel("<name and extension of your file>")

换句话说, 默认值为读取指定工作簿中的第一张工作表(标签)。如果你的工作簿比这复杂一些, 你可以打开它并使用以下excel_sheets函数列出工作表名称:


excel_sheets("<name and extension of your file>")

然后, 你可以从此处选择带有工作表参数的要读取的工作表:引用工作表的名称或索引(编号)。

对工作表名称的引用是直接的, 因此确实需要用引号引起来:


read_excel("<name and extension of your file>", sheet="Sheet 3")

工作表索引从1开始, 因此, 你也可以使用以下代码在第三个标签中加载:


read_excel("<name and extension of your file>", sheet=3)

在read_excel函数中, 如果将col_names参数保留为其默认值True, 则将工作表的第一行作为标题名称导入。与tibble和tidyverse标准保持一致, readxl列标题名称的形成与在Excel中编写的名称完全相同。

这导致行为与Excel和整洁的数据用户的期望更加一致。

如果你要将列名转换为经典的Base R有效标识符, 则Base R的make.names()能够快速执行必要的转换。前导数字和符号将被前缀或替换为X, 空格将被替换为。

或者, 如果你希望跳过使用标题指定的列名, 而是”从X1到Xn依次对列编号”, 则将此参数设置为false:即col_names = FALSE

将col_types参数保留为默认状态将导致在read_excel()对前10行进行采样并将每列分配给最适用的类时, 将自动注册类型。与你之前看到的read.table的colClasses参数一样, 你也可以在输入时手动对列类型进行分类。

像以前一样, 你将构造一个完整的向量, 为每一列指定类型。但是, 这次请确保使用以下分类选项:”空白”, “数字”, “日期”或”文本”。

例如, 如果要设置一个三列的excel工作表, 以在第一列中包含日期数据, 在第二列中包含字符, 在第三列中包含数值, 则需要以下代码行:


read_excel("<name and extension of your file>", col_types = c("date", "numeric", "text"))

尽管这对于高数据集来说很容易, 但是对于更宽的数据框, 你只想在导入后使用as.character或as.numeric类型突变来转换几种列类型。

如果你希望从一开始就避免所有问题, 并以尽可能最全面的方式将所有excel数据带入R中, 则可以简单地将每列指定为字符。对于十列的工作表, 其外观如下所示:


read_excel("<name and extension of your file>", col_types = rep("text", 10))

对于read_excel中可用的最有用的附加参数的最后一个, 如果你希望在设置列名称之前跳过行, 则有一个skip参数。这对于处理你非常喜欢的那些复杂的数据库报告非常有用。

举例来说, 假设你收到的每日报告带有漂亮的徽标, 五行报告生成详细信息以及第六行中的列标题。将其快速整洁地导入R中仅需要以下代码:


read_excel("<name and extension of your file>", skip = 5)

有关此软件包及其功能的更多详细信息, 请参阅此页面。

第五步。最后检查

执行完命令以读取存储数据集的文件后, 你可能需要最后一次检查以查看是否正确导入了文件。

请记住键入以下命令来检查数据集的属性的数据类型:


str("<name of the variable in which you stored your data>")

或者, 你也可以输入:


head("<name of the variable in which you stored your data>")

通过执行此命令, 你将看到数据框的第一行。这样, 你就可以检查数据集的字段是否正确分隔, 是否可以忘记指定或指示标题等。

请注意, 你可以在head()上添加参数n来指定要返回的数据帧的行数, 例如:head(df, 5)以返回数据帧df的前五行。

第六步。那里又回来

导入文件只是R的一小步, 但却是必不可少的步骤。从这一点开始, 你就可以开始分析, 处理或可视化导入的数据了。

你是否要继续并开始使用新导入的Excel文件的数据?查看针对直方图和机器学习的初学者教程。

赞(0)
未经允许不得转载:srcmini » 读取Excel文件并将其导入R

评论 抢沙发

评论前必须登录!