跳转到内容

R 编程/导入和导出数据

来自维基教科书,开放世界中的开放书籍

数据可以以多种格式存储。每个统计软件包都有自己的数据格式(例如 Microsoft Excel 的 xls,Stata 的 dta,SAS 的 sas7bdat 等)。R 可以读取几乎所有文件格式。我们为每种文件类型提供了一种方法。如果以下方法都不起作用,您可以使用专门的软件进行数据转换,例如免费软件OpenRefine或商业软件 Stat Transfer。[1] 无论如何,大多数统计软件都可以将数据导出为 CSV(逗号分隔值)格式,并且所有软件都可以读取 CSV 数据。这通常是使数据对所有人可用的最佳解决方案。

图形用户界面

[edit | edit source]

一些 IDE 或 GUI 提供了一些一键式解决方案来导入数据。

您也可以看看 speedR,这是一个图形用户界面,可以帮助从 Excel、OpenOfficeCalc、CSV 和其他文本文件导入数据。[2]

library(speedR)
speedR()

CSV (csv,txt,dat)

[edit | edit source]

您可以使用 read.table()read.csv()read.csv2() 从文本文件(通常是 CSV)导入数据。选项 header = TRUE 表示 CSV 文件的第一行应解释为变量名,选项 sep = 指定分隔符(通常是“,” 或 “;”)。

csv.get()Hmisc)是另一种选择。

mydata <- read.table("data.txt",header=TRUE)
mydata <- read.table("data.csv", header = TRUE, sep=",")  # import from a CSV
mydata <- read.csv("data.csv", header=T)
mydata <- read.table("data.csv", header = TRUE, sep=";") 
mydata <- read.csv2("data.csv", header=T)

请注意,如果您的数据存储在互联网上,没有任何问题。

df <- read.table("http://www.mywebsite.com/.../data.csv", header = TRUE, sep = ",")

默认情况下,字符串会转换为因子。如果要避免这种转换,可以指定选项 stringsAsFactors = FALSE

您可以使用 write.table() 将数据导出到文本文件。

write.table(mydat,file="mydat.csv",quote=T,append=F,sep=",",eol = "\n", na = "NA", dec = ".", row.names = T,col.names = T)

对于大型 CSV 文件,可以使用 ff 包。[3]

library("ff")
df <- read.csv.ffdf(file="large_csv_file.csv", header=TRUE, VERBOSE=TRUE, first.rows=10000, next.rows=50000)

固定宽度文本文件

[edit | edit source]

read.fwf()write.fwf()

一些固定宽度文本文件附带 SAS 脚本以导入它们。Anthony Damico 创建了 SAScii 包来轻松导入这些数据。[4]

非结构化文本文件

[edit | edit source]

Stata (dta)

[edit | edit source]
  • 我们可以使用 foreign 包中的 read.dta() 读取 Stata 数据,并使用 write.dta() 导出到 Stata 数据格式。
  • 请注意,Stata 中的字符串变量限制为 244 个字符。这在导出过程中可能是一个问题。
  • 另请参阅 memisc 包中的 Stata.file()Hmisc 包中的 stata.get
> library("foreign")
> mydata <- read.dta("mydata.dta",convert.dates = TRUE, convert.factors = TRUE, convert.underscore = TRUE)
> names(mydata)
> write.dta(mydata, file = "mydata.dta")

SAS (sas7bdat)

[edit | edit source]

sas7bdat[5] 包提供了对具有sas7bdat扩展名的 SAS 数据库的实验性支持。但是,sas7bdat由 64 位版本的 SAS 以及运行在非 Microsoft Windows 平台上的 SAS 生成的文件尚不支持。

SAS (xpt)

[edit | edit source]
  • 另请参阅 Hmisc 中的 sasexport.get()sas.get()
  • 另请参阅 SASxport 包。
library("foreign")
mydata<-read.xport("SASData.xpt")
names(mydata)

SPSS (sav)

[edit | edit source]
  • read.spss()foreign)和 spss.get()Hmisc
> library("foreign")
> mydata<-read.spss("SPSSData.sav")
> names(mydata)

EViews

[edit | edit source]

hexView 包中的 readEViews() 用于 EViews 文件。

Excel (xls,xlsx)

[edit | edit source]

从 Excel 导入数据并不容易。解决方案取决于您的操作系统。如果以下方法都不起作用,您始终可以将每个 Excel 电子表格导出为 CSV 格式,然后在 R 中读取 CSV。这通常是最简单快捷的解决方案。

XLConnect 支持读取和写入 xls 和 xlsx 文件格式。由于它基于 Apache POI,因此只需要 Java 安装,因此可以在许多平台上运行,包括 Windows、UNIX/Linux 和 Mac。除了读取和写入数据之外,它还提供了一些其他功能,例如添加图表、单元格样式和样式操作等等。

require("XLConnect")
wb <- loadWorkbook("myfile.xls", create = FALSE)
# Show a summary of the workbook (shows worksheets,
# defined names, hidden sheets, active sheet name, ...)
summary(wb)
# Read data from a worksheet interpreting the first row as column names
df1 <- readWorksheet(wb, sheet = "mysheet")
# Read data from a named region/range interpreting the first row as column
# names
df2 <- readNamedRegion(wb, name = "myname", header = TRUE)

RODBC 解决方案

library("RODBC")
32-bit Windows: channel <- odbcConnectExcel("Graphiques pourcent croissance.xls") # creates a connection
64-bit Windows: channel <- odbcConnectExcel2007("Graphiques pourcent croissance.xls")
sqlTables(channel) # List all the tables
effec <- sqlFetch(channel, "effec") # Read one spreadsheet as an R table
odbcClose(channel) # close the connection (don't forget)

xlsReadWrite 包(实际上,该包在 CRAN 库中不存在,但您可以从 CRAN 存档中下载旧版本)。

> library(xlsReadWrite)
mydat <- read.xls("myfile.xls", colNames = T, sheet = "mysheet", type = "data.frame", from = 1, checkNames = TRUE)
  • "sheet" 指定要导入的工作表的名称或编号。
  • "from" 指定电子表格的第一行。

gnumeric 包。[6] 该包使用一个名为 ssconvert 的外部软件,该软件通常与 gnumeric(Gnome Office 电子表格)一起安装。read.gnumeric.sheet() 函数读取 xls 和 xlsx 文件。

library("gnumeric")
df1 <- read.gnumeric.sheet(file = "df.xls", head = TRUE, sheet.name = "Feuille1")
df2 <- read.gnumeric.sheet(file = "df.xlsx", head = TRUE, sheet.name = "Feuille1")

另请参阅 xlsx(适用于 Excel 2007 文档)和 read.xls()gdata)。

Google Spread Sheets

[edit | edit source]

您应该将电子表格公开,将其发布为 CSV 文件。然后,您可以使用 read.csv() 在 R 中读取它。有关更多信息,请参阅 Revolution 的计算博客(link)。另请参阅 RGoogleDocslink)。

# Read from a Google SpreadSheet.
require(RCurl)
myCsv <- getURL("https://docs.google.com/spreadsheet/pub?hl=en_US&hl=en_US&key=0AkuuKBh0jM2TdGppUFFxcEdoUklCQlJhM2kweGpoUUE&single=true&gid=0&output=csv")
read.csv(textConnection(myCsv))

gnumeric 电子表格

[edit | edit source]

gnumeric[6]read.gnumeric.sheet() 读取一个工作表,read.gnumeric.sheets() 读取所有工作表并将它们存储在一个列表中。

library("gnumeric")
df <- read.gnumeric.sheet(file = "df.gnumeric", head = TRUE, sheet.name = "df.csv")
View(df)
df <- read.gnumeric.sheets(file = "df.gnumeric", head = TRUE)
View(df$df.csv)

OpenOffice 和 LibreOffice (ods)

[edit | edit source]

readODS 不需要外部依赖,使其跨平台。

library("readODS")
df=read.ods("df.ods")

speedR 是另一个选择。

library("speedR")
df <- speedR.importany(file = "df.ods")

请注意,您也可以使用 speedR 图形用户界面 (speedR()),它将返回用于复制的命令行。

library("speedR")
speedR()

JSON (JavaScript 对象表示法) 是一种互联网上非常常见的格式。rjson 库使从 json 格式导入数据变得容易[7]

# json.txt : a text file including data in the JSON format
library("rjson")
df <- fromJSON(paste(readLines("json.txt"), collapse=""))

使用以下方法可以轻松地将列表或数据框导出到 JSON 格式:toJSON()函数 

# df : a data frame
library("rjson")
json <- toJSON(df)

有时 JSON 数据可能更复杂,具有嵌套数组等结构。在这种情况下,您可能会发现使用在线转换器(如 json-csv.com)将文件转换为 CSV 更有用。然后,根据 上面的 CSV 指令 导入结果数据。

dBase (dbf)

[编辑 | 编辑源代码]

foreign 包中的 read.dbf()

library("foreign")
df  <- read.dbf("file.dbf")
str(df)

分层数据格式 (hdf5)

[编辑 | 编辑源代码]

hdf5 数据可以使用 hdf5 包读取[8]

DICOM 和 NIfTI

[编辑 | 编辑源代码]
  • 参见统计软件杂志中的“在 R 中使用 {DICOM} 和 {NIfTI} 数据标准工作”[9]
  • R 数据手册[10]
  • Paul Murrell 的数据技术简介[11]

参考文献

[编辑 | 编辑源代码]
  1. Stat Transfer
  2. speedR
  3. "在 R 中打开大型 CSV 文件". 检索于 2013 年 3 月 7 日. {{cite web}}: 未知参数 |site= 被忽略 (帮助)
  4. David Smith. "将具有 SAS 指令的公共数据导入 R". Revolution Analytics. 检索于 2013 年 2 月 1 日.
  5. sas7bdat
  6. a b 此命令已在 Ubuntu 10.10 和 R 2.11.1 上测试
  7. https://cran.r-project.org.cn/web/packages/rjson/index.html
  8. https://cran.r-project.org.cn/web/packages/hdf5/index.html
  9. Brandon Whitcher, Volker J. Schmid, Andrew Thorton “在 R 中使用 {DICOM} 和 {NIfTI} 数据标准工作”,统计软件杂志 第 44 卷 第 6 期 2011 年 10 月,链接
  10. R 数据手册
  11. Paul Murrell 数据技术简介
上一个:数据管理 索引 下一个:图形
华夏公益教科书