R语言-读取数据
R CSV 文件
R 作为统计学专业工具,如果只能人工的导入和导出数据将使其功能变得没有意义,所以 R 支持批量的从主流的表格存储格式文件(例如 CSV、Excel、XML 等)中获取数据。
CSV 表格交互
CSV(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号) 是一种非常流行的表格存储文件格式,这种格式适合储存中型或小型数据规模的数据。
由于大多数软件支持这个文件格式,所以常用于数据的储存与交互。
CSV 本质是文本,它的文件格式极度简单:数据一行一行的用文本保存起来而已,每条记录被分隔符分隔为字段,每条记录都有同样的字段序列。
以下是一个简单的 sites.csv 文件(存储在测试程序的相同目录下):
1 | id,name,url,likes |
CSV 用逗号来分割列,如果数据中含有逗号,就要用双引号将整个数据块包括起来。
**注意:**包含非英文字符的文本要注意保存的编码,由于很多计算机普遍使用 UTF-8 编码,所以我是用 UTF-8 进行保存的。
注意: CSV 文件最后一行需要保留一个空行,不然执行程序会有警告信息。
1 | Warning message: |
读取 CSV 文件
接下来我们就可以使用 read.csv() 函数来读取 CSV 文件的数据:
实例
1 | data <- read.csv("sites.csv", encoding\="UTF-8") |
如果不设置 encoding 属性,read.csv 函数将默认以操作系统默认的文字编码进行读取,如果你使用的是 Windows 中文版系统且没有设置过系统的默认编码,那系统的默认编码应该是 GBK。所以大家请尽可能地统一文字编码以防出错。
执行以上代码输出结果为:
1 | id name url likes |
read.csv() 函数返回的是数据框,我们可以很方便的对数据进行统计处理,以下实例我们查看行数和列数:
实例
1 | data <- read.csv("sites.csv", encoding\="UTF-8") |
执行以上代码输出结果为:
1 | [1] TRUE |
以下统计数据框中 likes 字段最大对数据:
实例
1 | data <- read.csv("sites.csv", encoding\="UTF-8") |
执行以上代码输出结果为:
1 | [1] 333 |
我们也可以指定查找条件,类似 SQL where 子句一样查询数据,需要用到到函数是 subset()。
以下实例查找 likes 为 222 到数据:
实例
1 | data <- read.csv("sites.csv", encoding\="UTF-8") |
执行以上代码输出结果为:
1 | id name url likes |
注意:条件语句等于使用 ==。
多个条件使用 & 分隔符,以下实例查找 likes 大于 1 name 为 Runoob 的数据:
实例
1 | data <- read.csv("sites.csv", encoding\="UTF-8") |
执行以上代码输出结果为:
1 | id name url likes |
保存为 CSV 文件
R 语言可以使用 write.csv() 函数将数据保存为 CSV 文件。
接着以上实例,我们将 likes 为 222 的数据 保存到 runoob.csv 文件:
实例
1 | data <- read.csv("sites.csv", encoding\="UTF-8") |
执行以上代码输出结果为:
1 | X id name url likes |
X 来自数据集 newper,可以通过参数 row.names = FALSE 来删除它:
实例
1 | data <- read.csv("sites.csv", encoding\="UTF-8") |
执行以上代码输出结果为:
1 | id name url likes |
执行完后,我们就可以看到 runoob.csv 文件生存:
R Excel 文件
Excel 格式的文件主要是 xls 或 xlsx,这两种文件可以在 R 语言中导入 xlsx 库来实现直接的读取。
R 语言读写 Excel 文件需要安装扩展包,我们可以在 R 到控制台输入以下命令来安装:
1 | install.packages("xlsx", repos = "https://mirrors.ustc.edu.cn/CRAN/") |
安装过程如下:
事实上,几乎所有的 Excel 软件与大多数表格软件一样支持 CSV 格式的数据,所以完全可以通过 CSV 与 R 交互,没必要再使用 Excel。
查看 xlsx 是否安装成功:
实例
1 | \# 验证包是否安装 |
执行以上代码输出结果为:
1 | [1] TRUE |
Excel 文件数据:
点击链接下载 Excel 测试数据:https://static.jyshare.com/download/sites.xlsx
接下来,我们可以使用 read.xlsx() 函数来读取 Excel 数据:
实例
1 | \# 读取 sites.xlsx 第一个工作表数据 |
R XML 文件
XML 指的是可扩展标记语言(eXtensible Markup Language),XML 被设计用来传输和存储数据。
如果你对 XML 还不了解,可以先查阅:XML 教程
R 语言读写 XML 文件需要安装扩展包,我们可以在 R 到控制台输入以下命令来安装:
1 | install.packages("XML", repos = "https://mirrors.ustc.edu.cn/CRAN/") |
查看是否安装成功:
1 | > any(grepl("XML",installed.packages())) |
创建 sites.xml 文件,xml 文件与测试脚本同一目录下,代码如下:
实例
1 | <sites\> <site\> <id\>1</id\> <name\>Google</name\> <url\>www.google.com</url\> <likes\>111</likes\> </site\> <site\> <id\>2</id\> <name\>Runoob</name\> <url\>www.runoob.com</url\> <likes\>222</likes\> </site\> <site\> <id\>3</id\> <name\>Taobao</name\> <url\>www.taobao.com</url\> <likes\>333</likes\> </site\> </sites\> |
接下来我们可以使用 XML 包来载入 xml 文件的数据:
实例
1 | \# 载入 XML 包 |
统计 xml 数据量:
实例
1 | \# 载入 XML 包 |
执行以上代码输出结果为:
1 | [1] 3 |
查看节点数据,某一行使用 [ ], 指定的行和列使用 [[ ]]:
实例
1 | \# 载入 XML 包 |
执行以上代码输出结果为:
1 | $site |
XML 转为数据列表
以上代码对输出都是 xml 格式,我们使用 xmlToList() 函数可以将文件对数据转为列表格式,更方便读取:
实例
1 | \# 载入 XML 包 |
执行以上代码输出结果为:
1 | $site |
XML 转为数据框
XML 文件数据可以转为数据框类型,这样我们就更方便对数据进行操作:
实例
1 | \# 载入 XML 包 |
执行以上代码输出结果为:
1 | id name url likes |
R JSON 文件
JSON: JavaScript Object Notation(JavaScript 对象表示法)。
JSON 是存储和交换文本信息的语法。
JSON 类似 XML,但比 XML 更小、更快,更易解析。
如果你对 JSON 还不了解,可以先查阅:JSON 教程
R 语言读写 JSON 文件需要安装扩展包,我们可以在 R 到控制台输入以下命令来安装:
1 | install.packages("rjson", repos = "https://mirrors.ustc.edu.cn/CRAN/") |
查看是否安装成功:
1 | > any(grepl("rjson",installed.packages())) |
创建 sites.json 文件,json 文件与测试脚本同一目录下,代码如下:
实例
1 | { "id":\["1","2","3"\], "name":\["Google","Runoob","Taobao"\], "url":\["www.google.com","www.runoob.com","www.taobao.com"\], "likes":\[ 111,222,333\] } |
接下来我们可以使用 rjson 包来载入 json 文件的数据。
查看数据,某一行使用 [ ], 指定的行和列使用 [[ ]]:
实例
1 | \# 载入 rjson 包 |
执行以上代码输出结果为:
1 | $id |
我们也可以使用 as.data.frame() 函数将 json 文件数据可以转为数据框类型,这样我们就更方便对数据进行操作:
实例
1 | \# 载入 rjson 包 |
执行以上代码输出结果为:
1 | id name url likes |
R MySQL 连接
MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。
如果你对 MySQL 还不了解,可以先查阅:MySQL 教程
R 语言读写 MySQL 文件需要安装扩展包,我们可以在 R 到控制台输入以下命令来安装:
1 | install.packages("RMySQL", repos = "https://mirrors.ustc.edu.cn/CRAN/") |
查看是否安装成功:
1 | > any(grepl("RMySQL",installed.packages())) |
MySQL 目前被甲骨文收购,所以很多人使用来它的复制版本 MariaDB,MariaDB 在 GNU GPL下开源,MariaDB 的开发是由 MySQL 的一些原始开发者领导的,所以语法操作都差不多:
1 | install.packages("RMariaDB", repos = "https://mirrors.ustc.edu.cn/CRAN/") |
在 test 数据库中创建数据表 runoob,表结构及数据代码如下:
实例
1 | \-- -- 表的结构 \`runoob\` \-- CREATE TABLE \`runoob\` ( \`id\` int(11) NOT NULL, \`name\` char(20) NOT NULL, \`url\` varchar(255) NOT NULL, \`likes\` int(11) NOT NULL ) ENGINE\=InnoDB DEFAULT CHARSET\=utf8mb4; \-- -- 转存表中的数据 \`runoob\` \-- INSERT INTO \`runoob\` (\`id\`, \`name\`, \`url\`, \`likes\`) VALUES (1, 'Google', 'www.google.com', 111), (2, 'Runoob', 'www.runoob.com', 222), (3, 'Taobao', 'www.taobao.com', 333); |
接下来我们可以使用 RMySQL 包来读取数据:
实例
1 | library(RMySQL) |
接下来我们可以使用 dbSendQuery 来读取数据库的表,结果集通过 fetch() 函数来获取:
实例
1 | library(RMySQL) |