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]- 请参阅 读取和写入文本文件 部分中的
scan()
和readLines()
。
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)。另请参阅 RGoogleDocs(link)。
# 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 指令 导入结果数据。
foreign 包中的 read.dbf()
。
library("foreign")
df <- read.dbf("file.dbf")
str(df)
本节是存根。 您可以通过 扩展它 来帮助维基教科书。 |
本节是存根。 您可以通过 扩展它 来帮助维基教科书。 |
- 参见统计软件杂志中的“在 R 中使用 {DICOM} 和 {NIfTI} 数据标准工作”[9]
- ↑ Stat Transfer
- ↑ speedR
- ↑ "在 R 中打开大型 CSV 文件". 检索于 2013 年 3 月 7 日.
{{cite web}}
: 未知参数|site=
被忽略 (帮助) - ↑ David Smith. "将具有 SAS 指令的公共数据导入 R". Revolution Analytics. 检索于 2013 年 2 月 1 日.
- ↑ sas7bdat
- ↑ a b 此命令已在 Ubuntu 10.10 和 R 2.11.1 上测试
- ↑ https://cran.r-project.org.cn/web/packages/rjson/index.html
- ↑ https://cran.r-project.org.cn/web/packages/hdf5/index.html
- ↑ Brandon Whitcher, Volker J. Schmid, Andrew Thorton “在 R 中使用 {DICOM} 和 {NIfTI} 数据标准工作”,统计软件杂志 第 44 卷 第 6 期 2011 年 10 月,链接
- ↑ R 数据手册
- ↑ Paul Murrell 数据技术简介