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

将数据导入R(第二部分)

本文概述

在此R数据导入教程是你所需的一切的后续教程(第一部分)中, srcmini继续提供其全面而又简单的教程, 以快速将数据导入R, 从简单的平面文本文件到更高级的SPSS和SAS文件。

正如我们的许多读者在第一篇文章中正确注意到的那样, 一些将数据导入R的出色软件包尚未引起任何关注, 该文章也没有明确涵盖使用标准数据集和大型数据集之间的区别。这就是为什么这将是今天的重点。

继续阅读以发现其他将你的特定文件导入R的新方法, 如果你还有其他疑问或发现错误, 请随时与我们联系。

(尝试此交互式课程:在R中导入数据(第1部分), 以在R中使用CSV和Excel文件。)

将数据从通用源导入R

首先, 本篇文章将更深入地介绍如何从常见的数据源(通常是类似于电子表格的数据)中获取数据到R中。与前一篇文章一样, 重点将放在将数据读取到R中, 该数据不同于Excel或任何其他类型的文件。

接下来, 将讨论来自其他来源(如统计软件, 数据库, Web抓取等)的数据。

如果你想进一步了解导入数据之前可能需要执行的步骤, 请转到我们的第一篇文章, 其中介绍了如何在将数据导入R之前准备数据和工作区。

使用scan()将平面文件读入R

除了在R数据导入教程的第一篇文章中提到的read.table()之外, scan()函数在处理存储在简单定界文本文件中的数据时也可以工作。与read.table()函数不同, scan()函数返回列表或向量, 而不是数据帧。

假设你具有以下.txt文档:


24 1991
21 1993
53 1962

你可以使用以下命令读入数据(可在此处下载):


data <- scan("birth.txt")

请注意, 你的文件也可以是在线数据集。在这种情况下, 只需将URL作为scan()函数的第一个参数传递。

另外, 你也可以将数据读入矩阵:


data <- matrix(scan("birth.txt"), nrow=2, byrow=TRUE)

提示:如果要彻底执行此操作, 则可能需要指定其他参数以使矩阵符合你的期望。转到此页面以获取有关matrix()函数的更多信息。

你还可以将输入文件的列读入单独的向量中:


data <- scan("age.txt", what = list(Age = 0, Birthyear= 0), skip=1, quiet=TRUE)

请注意如何首先将扩展名作为文件的(路径)传递给参数(取决于是否将工作目录设置为保存数据集的文件夹), 然后指定要读取的数据类型, 是否是否要跳过数据集的第一行, 该字符分隔字段, 并且要打印一行以说明已读取了多少项。

如果你的数据还可以包含其他数据类型, 则应稍微调整一下scan()函数, 如本例所示:


data <- scan("age.csv", what = list(Age = 0, Name= "", Birthyear= 0), skip=1, sep=";", quiet=TRUE)

提示:你也可以自己执行此操作!在此处下载上面使用的文本文件。

然后, 你还可以读取数据帧中的数据:


data <- data.frame(scan("age.csv", what = list(Age = 0, Name = "", Birthyear= 0), skip=1, sep=";", quiet=TRUE)

提示:scan()函数可以采用的许多参数与read.table()函数可以使用的参数相同。这就是为什么总是方便查看文档的原因!如果要阅读scan()函数的参数, 请转到此处。

请记住, 你可以获取工作目录并分别使用以下命令进行设置:


getwd()
setwd("<path to your folder>")

使用read.fwf()将固定列数据放入R中

要将”固定宽度格式的数据”表读入R中的数据帧, 可以使用utils包中的read.fwf()函数。

当数据文件的列包含空格或没有空格分隔它们时, 可以使用此功能。


   Phys / 00 / 1:    M  abadda
   Math / 00 / 2:    F  bcdccb
   Lang / 00 / 3:    F  abcdab
   Chem / 00 / 4:    M  cdabaa

在这里, 你确实知道, 例如, 主题值始终位于每行的前7个字符中, 性别值始终为22, 并且分数从字符25到30开始。

如果你想尝试将这些数据加载到R中, 则可以在此处轻松下载文本文件。

你需要执行以下命令, 才能将上方的数据正确地放入R中:


read.fwf("scores.txt", widths= c(7, -14, 1, -2, 1, 1, 1, 1, 1, 1), col.names=c("subject", "sex", "s1", "s2", "s3", "s4", "s5", "s6"), strip.white=TRUE)

请注意, widths参数给出了固定宽度字段的宽度。在这种情况下, 文件中的前七个字符是为课程名称保留的;然后, 你不希望读取接下来的14个字符:输入-14。接下来, 你需要一个字符来表示性别, 但是你不希望后面的两个字符, 因此传递-2。接下来的所有字符都需要读入单独的列中, 因此你可以通过将1, 1, 1, 1, 1, 1传递给参数来拆分它们。当然, 这些值可以并且将有所不同, 具体取决于要导入的列。

你可以将许多其他参数传递给read.fwf()函数。单击此处阅读它们。

请注意, 如果要使用Fortran样式格式规范加载文件, 则可以使用read.fortran()函数:


data <- tempfile()
cat(file = data, "345678", "654321", sep = "\n")
read.fortran(data, c("F2.1", "F2.0", "I2"))

从上面的小示例可以看到, 你将Fortran样式的格式规范用作read.fortran()函数的第二个参数。你可能传递的参数的格式为:” rFl.d”, ” rDl.d”, ” rXl”, ” rAl”或” rIl”, 其中” l”是列数, ” d”是小数位数, ” r”是重复数。在这种情况下, 你会看到通过c()函数列出的2.1、2.0和2, 这意味着你具有三列两行。在第一列中, 值具有一个小数位, 在第二列和第三列中, 也具有不带小数位的值。

关于列所包含的值的类型, 你可以具有:

  • 数字格式的” F”和” D”;
  • 如果你有字符值, 则为” A”;
  • ” I”表示整数值;
  • 和” X”表示可以跳过的列。

在这种情况下, 第一和第二列将包含数字格式, 而第三列将包含整数值。

注意, 重复代码” r”和小数位代码” d”始终是可选的。如果存在” r”, 则除了” X”格式外, 还需要长度代码” l”。

使你的(Google)电子表格进入R

可以通过多种方式将电子表格导入R中, 就像你已经在阅读和将Excel文件导入R中的教程中所读过的一样, 或者我们的第一本R数据导入教程就是你所需要的一切。本节将对此进行详细说明, 甚至进一步介绍, 包括Google电子表格和DIF文件!

进一步滚动以查找有关如何将电子表格导入R的更多信息。

将Excel电子表格导入R

除了xlsx软件包之外, 你还有许多其他选项可将电子表格读入R:

1.从剪贴板将Excel电子表格读取到R中

如果打开了电子表格, 则实际上可以将内容复制到剪贴板中, 然后将它们快速导入R。为此, 可以使用readClipboard()或read.table()函数:


readClipboard() #Only on Windows
read.table(file="clipboard")`

如你将看到的那样, 第一种方法适用于矢量数据, 但是如果剪贴板中有表格数据, 则将变得非常复杂。如果你想了解有关read.table()的更多信息, 那么你绝对应该转到R数据导入教程的第一部分, 或者我们有关将Excel文件读取和导入到R中的教程。

2.通过RODBC包将Excel电子表格读取到R中

将Excel电子表格导入R的第二种方法是通过RODBC包:

  • 使用此软件包的第一种方法是这样的:

library(RODBC)
connection <- odbcConnect("<DSN>")

请注意, 传递给odbcConnect()的参数实际上是DSN。有关如何设置DSN, 如何建立连接等的完整指南, 请转至此页面, 该指南内容广泛且易于访问!

  • 建立连接后, 还可以使用sqlQuery()函数从.xls电子表格获取数据:

query <- "<SQL Query>"
data <- sqlQuery(connection, query)
str(data)

重要提示:转至此页面, 内容广泛但易于访问的教程!

在R会话结束时, 不要忘记关闭连接:


odbcCloseAll()

提示:如果你想了解有关将电子表格或Excel文件导入R的更多信息, 请一定要阅读有关将数据导入R的第一篇教程, 或者考虑阅读有关将Excel文件导入R的教程, 其中涉及readxl和XLConnect软件包。等等。

将Google电子表格导入R

带有gs_read()函数的googlesheets软件包可让你将Google电子表格读入R。

首先执行以下代码行:


gs_ls()

让浏览器启动并完成身份验证过程。然后, 如果你想读入数据或对其进行编辑, 则必须对其进行注册。你可以通过按标题或键指定电子表格来做到这一点:


data <- gs_title("<your spreadsheet>")
data <- gs_key()

接下来, 你可以读取数据:


gs_read(data)

这只是你对googlesheets包所做的简短概述。在这里一定要仔细阅读所有详细信息, 并确保也查看此页面。

将数据交换格式(DIF)文件读入R

使用read.DIF()函数将DIF文件放入R:


data <- read.DIF("<your spreadsheet>", header=FALSE, as.is = !stringsAsFactors)

请注意, 你可以指定电子表格是否具有标题, 以及是否要”按原样”导入数据, 即是否要将字符变量转换为因子。在这种情况下, 你不想拥有它, 因此你输入了!stringsAsFactors。

有关此函数或其参数的更多信息, 请转到此页面。

将Excel文件导入R

除电子表格外, 你可能还对将实际的Excel文件放入R中感兴趣。不要再看了, 继续阅读以了解如何执行此操作!

请注意, 本文仅详细说明我们的教程:将Excel文件读取和导入到R中;以及我们的第一本” R数据导入教程”就是你所需要的一切!

使用readxl将Excel文件导入R

即使此程序包仍在积极开发中, 还是值得一试的, 因为它为你提供了一种非常简单的方式来读取Excel文件:


library(readxl)
read_excel("<path to file")

请记住, 如果文件夹位于工作目录中, 则只需键入文件名及其扩展名即可。通过以下代码行获取并设置你的工作目录:


getwd()
setwd("<Path to your folder>")

请注意, 你可以分别指定要读取的工作表, 列名和类型, 缺少的值以及要在读取具有工作表的任何数据之前分别跳过的行数, col_names, col_types, na和skip参数。在这里阅读它们。

使用openxlsx将Excel文件读入R

openxlsx软件包还为你提供了一种将Excel .xlsx文件读入R的简单方法:


library(openxlsx)
read.xlsx("<path to your file>")

如果你想了解有关此程序包或可传递给read.xlsx()函数的参数的更多详细信息, 请绝对单击此处。

提示:如果你想了解有关将Excel文件导入R的更多信息, 请绝对转到我们的第一个有关”将数据导入R”的教程, 或者考虑阅读我们有关将Excel文件导入和导入R的广泛教程, 该教程也涉及XLConnect软件包。 , 在其他人中。

将OpenDocument电子表格放入R

使用readODS包中的read.ods()函数将OpenDocument电子表格读入R并将它们放入数据框中:


library(readODS)
read.ods("<path to your file>", sheet = 1, formulaAsFormula = FALSE)

请注意, 除了要进入R的文件之外, 你还可以指定所需的工作表, 并且可以将公式显示为公式(例如, ” SUM(B1:B3)”)或结果值)。

将JavaScript对象符号(JSON)文件导入R

在我们有关将数据导入R中的第一篇文章中, 提到了rjson包以将JSON文件获取到R中。

不过, 还有其他软件包可用于将JSON文件导入R。请继续阅读以了解更多信息!

使用jsonlite包将JSON文件导入R

jsonlite软件包最近在大多数下载的R软件包中排名前25位, 下载量为66952, 绝对是R用户最喜欢的软件包之一。

你可以使用fromJSON()函数导入JSON文件:


library(jsonlite)
data <- fromJSON("<Path to your JSON file>")

有关jsonlite软件包的快速入门说明, 请转到此处。

使用RJSONIO包将JSON文件导入R

第三个将JSON文件放入R的知名软件包是RJSONIO。就像jsonlite和jsonlite包一样, 你使用fromJSON()函数:


library(RJSONIO)
data <- fromJSON("<Path to your JSON file")

最好的JSON包?

关于这个话题已经有相当多的讨论。如果你想了解更多信息, 请务必查看以下页面和文章:

  • 此页面主要通过代码示例提供插图, 这些示例使你可以更深入地了解R中JSON包的行为和性能。
  • 一定要阅读此博客文章, 该文章试图弄清楚哪个包在R中能最好地处理JSON数据。

将统计软件包中的数据获取到R中

如果你的数据不是真的像电子表格一样, 并且不是Excel或JSON文件, 则它可能只是由许多统计软件包之一制成的。

本节将为你提供更多读取SPSS, Stata或SAS文件的方法, 同时还概述了导入来自S-plus和Epi Info的文件。如果你想了解更多信息, 请务必确保返回我们的第一篇文章或下面提供的链接!

将SPSS文件导入R

除了使用外国软件包, 你还可以使用避险软件包将SPSS文件放入R。

切记在开始之前确保在工作区中安装并激活它!

避风港软件包提供read_spss()函数, 将SPSS文件读入R:


library(haven)
data <- read_spss("<path to your SPSS file>")

将Stata文件导入R

类似于外部程序包, 避风港程序包还提供了将Stata文件读入R的功能, 即read_dta():


data <- read_dta("<path to your STATA file>")

请记住, 始终在必要时安装软件包并在工作区中激活它们。例如, 你可以使用以下命令在工作区中安装和激活避风港软件包:


install.packages("haven")
library(haven)

将SAS文件导入R

由于上一篇文章中引用了sas7bdat软件包, 因此本后续教程将重点介绍其他读取SAS文件的方法:

1.如何使用外部软件包将SAS XPORT文件导入R

具有read.xport()函数的外部软件包还允许你将SAS XPORT文件放入R中:


library(foreign)
data <- read.xport("<path to your SAS file>")

2.如何使用SASxport软件包将SAS XPORT文件导入R

sasXPORT软件包还允许使用read.xport()函数读取SAS XPORT文件:


library(SASxport)
data <- read.xport("<path to your SAS file>")

3.如何使用避风港软件包将SAS文件导入R

就像国外和sas7bdat软件包一样, 避风港软件包还允许你使用read_sas()函数将b7dat文件读入R:


library(haven)
data <- read_sas("<path to your SAS file>")

将S-plus文件放入R

对于旧的S-plus数据集, 即在Windows版本3.x, 4.x或2000或Unix版本3.x上生成的具有4个字节整数的数据集, 可以从外部使用read.S()函数。包:


library(foreign)
data <- read.S("<Path to your file>")

将Epi信息文件读入R

正如你可能在我们之前的教程或本教程中已经读过的那样, 外部软件包提供了许多将特定文件读入R的功能, 而Epi Info就是其中之一。你可以只使用read.epiinfo()函数将数据放入R中:


library(foreign)
data <- read.epiinfo("<Path to your file>")

有关Epi信息的更多信息, 请单击此处。

从其他来源获取数据到R

除了常见的来源和统计软件之外, 还有许多其他来源, 你可以从中获取要读入R的数据。

下面列出了一些。继续阅读!

将MATLAB文件导入R

你可以使用R.matlab包及其readMat()函数将MATLAB文件导入R。

你可以将字符串作为此函数的第一个参数传递, 也可以传递原始向量。在第一种情况下, 你的输入将被解释为文件名, 而在第二种情况下, 它将被视为原始二进制连接:


library(R.matlab)
data <- readMat("<Path to your file>")

readMat()函数将返回一个命名列表结构, 其中包含你导入的MAT文件中的所有变量。

将八度文件读入R

外国包裹又来了!使用read.octave()函数将Octave文本数据导入R:


library(foreign)
data <- read.octave("<Path to your file>")

将FitbitScraper数据导入R

你可以使用fitbitScraper包从fitbit获取数据。

(对于不熟悉该公司的用户:该公司提供产品, 例如活动跟踪器和其他技术设备, 这些设备可以测量个人数据, 例如步行的步数或睡眠质量。)

请转到此处, 获取有关如何使用fitbitScraper软件包的简短实用教程。

将Quantmod数据导入R

你可以使用此包从带有R的Internet来源中提取财务数据。用于将数据放入R中的函数是getSymbols(), 如以下示例所示:


library(quantmod)
data <- getSymbols("YHOO", src="google")

请注意, 首先要指定一个字符向量, 其中包含要加载的每个符号的名称。在这种情况下, 即为” YHOO”。然后, 你定义一种采购方法。目前可用的采购方法是yahoo, google, MySQL, FRED, csv, RData和oanda。

接下来, 你指定查找参数并将其保存以供以后的会话使用:


setSymbolLookup(YHOO='google', GOOG='yahoo')
saveSymbolLookup(file="mysymbols.rda")

新的会话然后调用


loadSymbolLookup(file="mysymbols.rda")
getSymbols(c("YHOO", "GOOG"))

如果你想了解有关R中的量化金融应用程序的更多信息, 请单击此处或转到此页面以获取针对初学者使用Quantmod的详细教程。

将ARFF文件放入R

可以使用read.arff()函数读取来自Weka属性关系文件格式(ARFF)文件的数据:


library(foreign)
data <- read.arff("<Path to your file>")

有关此功能的更多信息, 请转到此页面。

请注意, RWeka软件包还提供了导入ARFF文件的相同功能。如果你想了解更多, 请去这里!

从数据库导入数据到R

除了上一篇文章中介绍的MonetDB.R, rmongodb和RMySQL外, 你还可以使用其他软件包与R中的数据库连接。

你还可以使用mongolite, RMongo, RODBC, ROracle, RPostgreSQL, RSQLite, RJDBC。

有关这些软件包的教程, 请查看以下列表:

  • 如果你想开始使用mongolite, 本教程可能会为你提供帮助;
  • 要获得RMongo的帮助, 你可以转到此博客文章。
  • 本教程还对RODBC包进行了广泛的讨论。有关工作方法的简短说明, 请转到此处;
  • 要了解如何使用ROracle, 可以查看此演示文稿。
  • 有关如何使用RPostgreSQL的更多信息, 请访问此处或此处。
  • 如果你想了解有关使用RSQLite的更多信息, 请绝对访问此非常有用的教程。
  • 最后, 要使用RJDBC连接到SQL Server, 如果要连接到Oracle数据库, 则应查看此博客文章或转到此页面。请注意, 最后一页还为你提供了连接到Oracle数据库的其他选项。

注意, 还有一个数据库接口包DBI, 它允许R和关系数据库管理系统之间进行通信。欲了解更多信息, 请点击这里。

在此可以找到有关如何使用此软件包的一些说明。

将二进制文件导入R

二进制数据文件包含以二进制数字组存储的信息。每个二进制数字为零或一。分组在一起的八个二进制数字形成一个字节。你可以使用readBin()函数读取二进制数据:


connection <- file("<path to your file>", "rb") #You open the connection as "reading binary"(rb)
data <- readBin(connection, what="numeric") #Mode of the vector to be read

有关更详细的示例, 请转到此页面。有关readBin()函数的更多信息, 请单击此处。

将二进制数据格式读入R

软件包hdf5, h5r, rhdf5, RNetCDF, ncdf和ncdf4提供了与NASA的HDF5和UCAR的netCDF数据文件的接口。

对于那些对如何使用R中的HDF5或netCDF文件的一些教程感兴趣的人, 请考虑查看以下资源:

  • 你也可以在此处使用pathfinder包找到有关在R中使用HDF文件的出色教程。
  • 可以在此页面上找到针对R中netCDF的初学者的易于访问的教程。

将DBF文件放入R

DBF或数据库文件是dBase的基础格式。你可以使用外部包读取DBF文件, 该外部包提供read.dbf()函数:


library(foreign)
data <- read.dbf("<Path to your file>")

请注意, 如果你使用的是Windows, 则还可以将RODBC软件包与odbcConnectDbase()函数一起使用, 以通过Microsoft的dBase ODBC驱动程序读取DBF文件。

将平面列联表导入R

外部软件包允许你读取多种文件格式; “平面”列联表也不例外。你可以使用read.ftable()函数来完成此操作:


library(foreign)
data <- read.ftable("<Path to your file>")

请记住, “平面”列联表与”正常”列联表非常相似:它们包含

所涉及的变量(因子)级别的每种组合的计数。但是, 此信息被重新排列为矩阵, 其行和列对应于行和列变量的级别的唯一组合。因此, 通常首选”平面”列联表来表示高维列联表。

将地理信息系统(GIS)文件读入R

你可以使用rgdal和raster软件包等将GIS文件放入R。

如果你不确定如何开始使用rgdal软件包, 请考虑阅读这篇不错的博客文章, 其中介绍了如何使用R中的地理空间数据。

你也可以查看本教程, 该教程适用于rgdal和栅格。

将综合分类信息(ITIS)表导入R

你可以使用read.table()函数导入ITIS表:


data <- read.table("<Path to your file>")

有关ITIS的更多信息, 请单击此处。

将大数据集导入R

导入大数据集通常会引起R用户之间的讨论。除了用于连接数据库的软件包外, 在处理大数据时还有其他一些突出的软件包。

使用data.table包将大数据集导入R

流行的data.table软件包被描述为”快速友好的文件整理器”, 是一种非常有用且易于使用的软件包。它的fread()函数旨在将常规定界文件中的数据直接导入R中, 而不会造成任何弯路或废话。

请注意, 在这种情况下, “常规”意味着数据的每一行都必须具有相同的列数。一个例子:


  V1 V2 V3
1  1  6  a
2  2  7  b
3  3  8  c
4  4  9  d
5  5 10  e

此功能的一大优点是, 可以自动检测以sep, colClasses和nrow等参数表示的所有控件。同样, bit64 :: integer64类型也将被检测并直接读取, 而无需在转换之前将其读取为字符。

请记住, bit64 :: integer64类型是64位整数:这些数字以64位长的形式存储在计算机中。默认情况下, 这些仅是32位。因为检测到bit64 :: integer64类型, 所以系统知道它是一个数字, 并且不会作为字符读取, 然后将其转换为整数。

fread()函数的示例是:


library(data.table)
data <- fread("http://assets.srcmini02.com/blog_assets/chol.txt")
data

##      AGE HEIGHT WEIGHT CHOL  SMOKE BLOOD  MORT
##   1:  20    176     77  195 nonsmo     b alive
##   2:  53    167     56  250 sigare     o  dead
##   3:  44    170     80  304 sigare     a  dead
##   4:  37    173     89  178 nonsmo     o alive
##   5:  26    170     71  206 sigare     o alive
##  ---
## 196:  35    174     57  222   pipe     a alive
## 197:  38    172     91  227 nonsmo     b alive
## 198:  26    170     60  167 sigare     a alive
## 199:  39    165     74  259 sigare     o alive
## 200:  49    178     81  275   pipe     b alive

请注意, 使用fread()函数读入数据将返回一个数据表:


str(data)

## Classes 'data.table' and 'data.frame':   200 obs. of  7 variables:
##  $ AGE   : int  20 53 44 37 26 41 39 28 33 39 ...
##  $ HEIGHT: int  176 167 170 173 170 165 174 171 180 166 ...
##  $ WEIGHT: int  77 56 80 89 71 62 75 68 100 74 ...
##  $ CHOL  : int  195 250 304 178 206 284 232 152 209 150 ...
##  $ SMOKE : chr  "nonsmo" "sigare" "sigare" "nonsmo" ...
##  $ BLOOD : chr  "b" "o" "a" "o" ...
##  $ MORT  : chr  "alive" "dead" "dead" "alive" ...
##  - attr(*, ".internal.selfref")=<externalptr>

这与read.table()不同, 后者会创建数据的数据帧。

你可以在此处找到有关数据帧和数据表之间差异的更多信息。简而言之, 最重要的是要知道所有data.tables也是data.frames:data.tables也是data.frames。可以将data.table传递到仅接受data.frame的任何包, 并且该包可以在data.table上使用[.data.frame语法。在此处阅读有关data.table的更多信息。


library(data.table)
data <- fread("http://assets.srcmini02.com/blog_assets/chol.txt", sep=auto, nrows = -1, na.strings = c("NA", "N/A", ""), stringsAsFactors=FALSE
              )

请注意, 输入内容也可能是你要阅读的文件, 不一定总是URL。另外, 请注意, 例如, 有多少个参数与你在read.table()中使用的参数相同。

提示:想进一步了解data.table?也许我们关于R中的数据分析的课程, data.table方式可能会让你感兴趣!在Matt Dowle和Arun Srinivasan的指导下, 你将立即从成为data.table的新手成为data.table的专家。

使用ff软件包将大数据集放入R

ff软件包允许”在磁盘上高效存储大数据并具有快速访问功能”。这是你在讨论将大数据读取为数据帧的讨论时经常弹出的解决方案之一, 例如此处。

如果要将分隔的平面文件导入ff数据帧, 则可以仅使用read.table.ffdf(), read.csv.ffdf(), read.csv2.ffdf(), read.delim.ffdf()或read.delim2.ffdf()函数, 与read.table()函数及其变体或便捷包装程序非常相似, 我们先前的一篇文章对此进行了介绍:


bigdata <- read.table.ffdf(file="<Path to file>", nrows=n)

请注意, 你的第一个参数可以为NULL(在这种情况下), 也可以指定读取记录附加到的可选ffdf对象。如果你想了解更多, 请到这里。然后, 使用自变量文件命名从中读取数据的文件。你还可以使用nrows指定要读取的最大行数(与使用read.table()相同!)。

你还可以进一步指定要读取每个块的函数的文件编码, 级别或名称:


library(ff)
bigdata <- read.table.ffdf(file="<Path to file>", nrows=n, fileEncoding="", levels=NULL, FUN="read.table")

提示可以添加到read.table.ffdf(), read.csv.ffdf(), read.csv2.ffdf(), read.delim.ffdf()或read.delim2.ffdf()函数中的更多参数在这里找到。

使用bigmemory将大数据集导入R

对于R中与大数据集有关的任何查询, 经常在搜索结果中弹出的另一个包是bigmemory包。该软件包允许你”使用共享内存和内存映射文件管理大量矩阵”。

请注意, 你不能在Windows上使用此软件包:没有Windows二进制文件可用。


library(bigmemory)
bigdata <- read.big.matrix(filename="<File name>", sep="/", header=TRUE, skip=2)

像往常一样, 首先给函数指定文件名, 然后可以开始指定其他内容, 例如分隔符, 标题或在开始使用参数sep, header读入文件之前要跳过的行数。和分别跳过。

请注意, 这些只是几个示例!你可以将更多的参数传递给read.big.matrix()函数!如果你想了解更多信息, 请考虑阅读文档。

使用sqldf包将大数据集读入R

sqldf软件包也是处理大型数据集时可能考虑使用的软件包之一。该软件包允许你”在R上执行SQL选择”, 尤其是如果你想将文件读入R并使用SQL语句进行过滤, 则它的read.csv.sql()函数非常方便。然后, R仅处理一部分数据:


library(sqldf)
bigdata <- read.csv.sql(file="<Path to your file>", sql="select * from file where ...", colClasses=c("character", rep("numeric", 10)))

请注意, 上面的示例与其他函数非常相似, 这些函数允许你将大数据集导入到R中, 唯一的例外是, 传递给read.csv.sql()函数的第二个参数是SQL语句。你在SQL查询中引用的表是在read.csv.sql()的file参数中提到的文件的一部分。

提示:有关如何使用sqldf的更多信息, 你可以在此处获得视频教程, 或在此处获得基本的书面概述。

使用read.table()函数将大数据集导入R

你可以使用”标准” read.table()函数来导入数据, 但是这可能比专门设计用于更大数据集的其他程序包要花费更多的时间。要查看read.table()函数的工作方式, 请回到我们的第一篇文章。

为了使此函数更快一点, 你可以自己对其进行调整, 以获得优化的read.table()函数。实际上, 这种调整仅包括向通常的read.table()函数添加参数, 如下所示:


df <- read.table("<Path to your file>", header = FALSE, sep="/", quote = "", na.strings = "EMPTY", colClasses = c("character", "numeric", "factor"), strip.white = TRUE, comment.char="", stringsAsFactors = FALSE, nrows = n
                 )

注意

  • 你首先要传递(文件的路径), 具体取决于你是否已将工作目录设置为文件所在的文件夹。
  • 然后, 使用header参数指示文件是否包含变量名称作为其第一行。在上面的示例中情况并非如此。
  • 字段分隔符由参数sep设置为/。这意味着文件的每一行上的值都由该字符分隔。
  • 接下来, 你还可以选择禁用或启用引用。在这种情况下, 由于quote =””, 因此你禁用了引用。
  • 你还定义将数据集中的字符串” EMPTY”解释为NA值。
  • 然后, 你还定义了列的类:在这种情况下, 你指示第一列是字符列, 第二列是数字列, 最后一个是因子。
  • 使用strip.white, 你可以从未加引号的字符字段中删除前导和尾随空白;仅在使用sep参数时适用!
  • 当comment.char设置为””时, 你将关闭注释的解释。
  • 你不希望将字符转换为因子!这就是为什么你还定义了colClasses的原因。你可以通过将stringsAsFactors设置为FALSE来确认。
    提示:如果你想顺利导入数据, 则此参数与colClasses和comment.char一起可能是更重要的参数之一!
  • 最后, 你要放入最大行数。

提示:如果你想获得传递给read.table()函数的所有参数的更多信息, 则绝对应该考虑阅读我们的文章, 将Excel文件读入R。

使用readr包将大数据集放入R

readr程序包是将大数据集导入R的较快程序包之一, 它允许你读取表格文本数据, 就像read.table一样。但是, 阅读器包提供了”许多替代功能, 这些功能提供了附加功能并且速度更快”(请参见此处)。


df <- read_table("<Path to your file>", col_names=TRUE)

请注意, readr包还提供了read_csv(), read_csv2(), read_delim(), read_fwf(), read_tsv()等函数, 这些函数的运行速度比原始函数还快!详细信息可以在这里找到。

提示:有关此软件包的更多信息, 请参见此GitHub页面。

关于在R中处理大数据的一些说明

有关在R中处理大数据的更多技巧, 你可能应该看一下StackOverflow讨论, 该讨论既涉及软件包, 也涉及诸如以二进制格式存储数据以及使用saveRDS / readRDS或rhdf5软件包的提示。 HDF5格式。

请注意, 上面已经介绍了最后一种文件格式, 除了上面已经介绍的软件包以外, 还有许多其他软件包。例如, 用于连接数据库的软件包(例如RODBC和MonetDB.R)也可以轻松地用于处理较大的数据集, 当你要直接使用存储在多个数据库中的数据时, dplyr软件包也证明了其价值。数据库类型。

提示:是否有兴趣在R中处理数据?那么我们关于dplyr的互动课程可能适合你!在Garrett Grolemund的指导下, 你将学习如何使用dplyr执行复杂的数据操作任务。

确保还检查了这篇有趣的文章, 该文章测试了上面列出的某些软件包的负载性能!

使用rio软件包将数据导入R

这款”用于数据输入/输出的瑞士军刀”使你更轻松地将数据输入和输出到R中!你几乎可以从任何文件格式输入或输出数据:安装rio软件包时, 你将许多单独的数据读取软件包合并为一个。如果随后要输入或输出数据, 则只需记住两个函数:import()和export():rio将依靠单独的数据读取包来从文件扩展名推断数据结构, 以本地读取Web基于数据的数据源, 并为导入和导出设置合理的默认值。

简而言之, rio支持用于导入和导出的广泛的常用文件类型集。

使用rio导入文件的方式如下:


library(rio)
data <- import("<Path to your file>")

如果你想确切地了解rio支持哪些文件格式, 请访问此页面。

本文总结

如果你想了解更多有关在R中使用大数据的知识, 请务必查看srcmini的”如何在R中使用Quandl”和”使用Revolution R Enterprise进行大数据分析”课程!

赞(0)
未经允许不得转载:srcmini » 将数据导入R(第二部分)

评论 抢沙发

评论前必须登录!