第八章 获取数据
8.1内置数据集
R 的基本分发包中有一个叫 datasets,里面全是示例数据集。使用 data 函数可查看所有你已成功加载了的包的数据集:
data()
如需更完整的列表,包括已安装的所有包的数据,可使用以下方法:
data(package = .packages(TRUE))
如果你想访问任意数据集里的数据,只需调用 data 函数,传入数据集的名称及其所在的包 名(如果此包已被加载,可省略这个 package 参数):
data("kidney", package = "survival")
head(kidney)
8.2读取文本文件
有众多的格式和文本文件标准可用于存储数据。用于存储数据的通用格式为分隔符值(即 CSV 或制表符分隔文件)、可扩展标记语言(XML)、JavaScript 对象表示法(JSON)和YAML(这是 YAML Ain’t Markup Language 的递归表示)。
8.2.1CSV和制表符分隔(Tab-Delimited)文件
8.2.1.1用read.table读取文件
read.table(file,header=TRUE,fill=TRUE,sep="符号",nrow=n,skip=n)
file要读取的文件
header读取该文件(该数据有标题行)的标题行
fill使用NA值代替缺失值
sep决定了使用哪个 字符作为字段之间的分隔符
nrow 可以指定读取数据的n行
skip 决定跳过文件开始的n行
更多高级选项包括:覆盖默认的行名、列名和类,指定输入文件的字符编码,以及输入的字符串格式的列如何声明。
8.2.1.2用read.csv和read.delim读取文件
read.csv 分隔符默认设置为逗号,并假设数据有标题行。
read.csv2 使用逗号作为小数位,并用分号作为分隔符。
read.delim 使用句号作为小数位来导入制表符分隔的文件。
read.delim2 使用逗号作为小数位来导入制表符分隔的文件。
8.2.1.3用write.table和write.csv写入文件
write.table(x,"file",row.names = T,quote=T)
x要写入的数据
file要写入的文件
row.names设置行名为真
quote代表字符串的双引号
8.2.2非结构化文本文件
不是所有的文本文件都像定界符文件那样有一个定义良好的结构。
8.2.2.1用readLines读取文件
text_file <- system.file(
"extdata",
"Shakespeare's The Tempest, from Project Gutenberg pg2235.txt",
package = "learningr" ) the_tempest <- readLines(text_file) the_tempest[1926:1927]
## [1] " Ste. Foure legges and two voyces; a most delicate"
## [2] "Monster: his forward voyce now is to speake well of"
8.2.2.2用writeLines写入文件
writeLines(
rev(text_file),
"Shakespeare's The Tempest, backwards.txt"
)
8.2.3XML和HTML文件
安装XML包
install.packages("XML")
XML 包将提供两种选择以存储结果:一是利用内部节点 ,或使用 R 节点。通常,你应使用内部节点来存储,因为这样就能用 XPath来查询节点树。
library(XML) xml_file
<- system.file("extdata", "options.xml", package = "learningr") r_options
<- xmlParse(xml_file)
使用内部节点的一个问题是,str 和 head 等汇总函数不能和它们一起使用。要使用 R- 级的节点,请设置 useInternalNodes = FALSE:
xmlParse(xml_file, useInternalNodes = FALSE) xmlTreeParse(xml_file)
XPath 是一种用于查询 XML 文档的语言,它能基于某些过滤规则寻找到相应的节点。
xpathSApply(r_options, "//variable[contains(@name, 'warn')]")
htmlParse 和 htmlTreeParse 是用于 HTML 页面导入的函数,它们的行为方式基本一样。 XML 格式在序列化(也即存储)对 象时非常有用,这种格式可被大多数其他软件读取。XML 包没有提供序列化的功能,但 你可以使用 Runiversal 包中的 makexml 函数来完成它。
library(Runiversal)
ops <- as.list(options())
cat(makexml(ops), file = "options.xml")
8.2.4JSON和yaml文件
有两个包可用于处理 JSON 数据:RJSONIO 和 rjson。但在读入不正确的 JSON 时,RJSONIO 一般比 rjson 更宽容。双冒号 :: 用于把相同名字的函数从不同的包中分别出来(如果只加载两 个包中的一个,就不需要双冒号):
注:JSON 的规范不允许无穷值或 NaN 值,而且它对缺失数的定义比较模糊。这 两个包处理这些值的方式有所不同:RJSONIO 把 NaN 和 NA 映射为 JSON 的null,但保留正 负无穷;而 rjson 会把所有这些值都转换为字符串:
在 yaml 包中有两个函数能导入 YAML 数据:yaml.load 接受一个 YAML 的字符串,并将其转换为 一个 R 对象;yaml.load_file 也一样,不过它把输入的字符串作为包含 YAML 文件的路 径处理:
8.3读取二进制文件
8.3.1读取Excel文件
R提供了读取 Excel 文件的函数:使用 read.xlsx 和 read.xlsx2 导入电子表格,read.xlsx2的速度更快且底层的 Java 库也比 R 程序更加成熟。
8.3.2读取SAS、Stata、SPSS和MATLAB文件
使用 read.ssd 读取 SAS 永久数据集
使 用 read.dta 读取 Stata 的 DTA 文件
使用 read.spss 读取 SPSS 数据文件的方法
使用 write.foreign将SAS,Stata,SPSS 写入文件
可以使用 R.matlab 包中的 readMat 和 writeMat 分别对MATLAB 的二进制数据文件进行读写。
8.4Web数据
8.4.1网站API下载数据
有一些包可通过网站的 API 接口直接下载数据到 R 系统。例如:查看世界银行的世界发展指标数据
install.packages("WDI")#安装包
library(WDI) #导入包
wdi_datasets <- WDIsearch()#列出所有数据集
head(wdi_datasets)#查看
wdi_trade_in_services <- WDI(
indicator = "BG.GSR.NFSV.GD.ZS"
) #取其中一条数据
str(wdi_trade_in_services)#用str查看
8.4.2抓取网页
install.packages("RCurl")#安装XML包
library(RCurl)#加载XML包
install.packages("XML")#安装XML包
library(XML)#加载XML包
URL <-"http://nba.sports.163.com/stat/playerrank/all/point/"#网页地址
allSourceCode <- IMUFE_url %>% read_html(encoding = "UTF-8")#编码格式
allSourceCode <- allSourceCode %>%
html_node("div[id=binf]")#读取id为binf的div
IMUFE_text <- allSourceCode %>%
html_nodes("a") %>% html_text()#读取div中a标签中的文本
function_Name | meaning_Chinese |
---|---|
back | 导航工具 |
encoding | 猜测并修复错误的字符编码。 |
follow_link | 导航到一个新的url。 |
google_form | 使链接到谷歌形式给定的id |
guess_encoding | 猜测并修复错误的字符编码。 |
html | 解析HTML页面。 |
html_attr | 从html中提取属性、文本和标记名称。 |
html_attrs | 从html中提取属性、文本和标记名称。 |
html_children | 从html中提取属性、文本和标记名称。 |
html_form | 解析页面中的表单。 |
html_name | 从html中提取属性、文本和标记名称。 |
html_node | 从HTML文档中选择节点 |
html_nodes | 从HTML文档中选择节点 |
html_session | 在html浏览器中模拟会话。 |
html_table | 将html表解析为数据帧。 |
html_text | 从html中提取属性、文本和标记名称。 |
is.session | 在html浏览器中模拟会话。 |
jump_to | 导航到一个新的url。 |
pluck | 按位置提取列表的元素。 |
read_xml.response | 解析HTML页面。 |
read_xml.session | 解析HTML页面。 |
repair_encoding | 猜测并修复错误的字符编码。 |
session_history | 历史记录导航工具 |
set_values | 在表单中设置值。 |
submit_form | 将表单提交回服务器。 |
8.5访问数据库
R可与所有常见的数据库相连接。DBI 包为访问 DBMS 提供了统一的语法——目前的 SQLite、MySQL/MariaDB、PostgreSQL 和 Oracle 都 能支持,它还提供了一个封装了 JDBC API 的函数。
数据库 | 包 |
---|---|
SQLite | RSQLite |
MySQL | RMySQL |
PostgreSQL | PostgreSQL |
Oracle | ROracle |
JDBC | RJDBC |
ODBC/SQL Server/Access | RODBC |
library(DBI)#加载包
library(RSQLite)#加载包
driver <- dbDriver("SQLite")#定义驱动
db_file <- system.file(
"extdata",
"crabtag.sqlite",
package = "learningr" )#定义文件
conn <- dbConnect(driver, db_file)#连接数据库
query <- "SELECT * FROM IdBlock"
(id_block <- dbGetQuery(conn, query))#进行数据库操作
dbDisconnect(conn)#断开连接
dbUnloadDriver(driver)#卸载驱动
标签:XML,文件,8.2,读取,read,第八章,获取数据,html
From: https://www.cnblogs.com/simpleness/p/17626115.html