【NEW-2.0】R-创建数据集
前言
数据集的概念
数据集是由数据构成的矩形数组,行表示观测(记录),列表示变量(字段)。
R
有许多用于存储数据的结构,包括标量,向量,数组,数据框和列表。
R
可以处理的数据类型包括数值型,字符型,逻辑型,复数型和原生型。
数据结构
向量
向量是用于存储数据的一维数组。
创建向量
利用c()
可以用来创建向量。
1 | a <- c(1,2,3,4) |
注:单个向量之内的数据类型需要相同。一个向量不可以混合多种数据类型
访问向量元素
通过指定向量中元素的位置来访问元素,例如:
a[c(1)]
来表示指定访问向量a
中第一个元素。a[c(1,3)]
来表示指定访问向量a
中第一个和第三个元素。a[c(1:3)]
来表示访问向量a
中第一个到第三个元素。
【从C
和C#
角度看】
- 向量就是规定类型的一维数组,通过函数
c(数据内容,间隔采用,号)
来创建。 - 访问数组中元素通过下标来访问,使用函数
向量变量[c(下标位置)]
需要注意的是:**
R
语言的数字是从1开始的,而不是0.**
矩阵
矩阵是一个二维数组。
创建矩阵
通过函数matrix
来创建。函数源码如下:
1 | function (data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL) |
- data:二维数组数据内容
- nrow:(数值)行数,默认
1
- ncol:(数值)列数,默认
1
- byrow:(布尔)填充数值是从列开始还是从行开始,
FLASE
默认值,表示从列开始填充 - dimnames:(两个参数的
list
)行列名称重命名,默认NULL
代码示例:
1 | > # 创建一个矩阵,按列填充 |
访问矩阵元素
同理也是通过矩阵下标来表示位置,矩阵名称[x,y]
,x
表示行数,y
表示列数。代码示例:
1 | > # 创建一个矩阵,按行填充,并重命名 |
【从C
和C#
角度看】
- 矩阵是已经嵌套好的二维数组,更加偏向于数学上的线性代数。
数组
数组是矩阵的加强版,它的维度可以大于2。
创建数组
通过函数array
创建,函数原型示例:
1 | array(data = NA, dim = length(data), dimnames = NULL) |
- data:数组的数据
- dim:数组的长度,
c(行数,列数,维度)
- dimnames:(
List
类型)数组行列维度名称
代码示例:
1 | > # 创建一个一维数组 |
数组元素的访问
同上,使用元素位置来访问,代码示例
1 | > # 创建一个一维数组 |
数据框
数据框类似于Excel,是一种键值对的格式,它可以混合使用多种数据类型。
创建数据框
通过**使用函数data.frame()
**,函数原型如下:
1 | data.frame(..., row.names = NULL, check.rows = FALSE, |
- …:数据内容
- row.names:行名称
代码示例:
1 | > # 创建一个数据框 |
数据框元素的访问
可以通过元素位置索引来访问,**数据框名称[第几列]
,表示访问第几列元素。数据框名称[第几行,第几列]
或者**如果想要表现其中两个数据关系,可以通过table(数据框名称$列/行名称)
来实现。代码示例:
1 | > # 创建一个数据框 |
我们在每次访问变量元素的时候,都需要输入数据框名称$列/行名称
,会比较繁琐,可以通过使用函数attach()
和detach()
或者单独使用函数with()
来简化代码。
或者使用$
来访问元素。代码示例:
1 | > # 创建一个数据框 |
因子
暂欠
通过函数factor
来创建.
列表
列表也是一种一维数组,它可以嵌套多种数据类型。
创建列表
使用函数list()
来创建,函数原型:
1 | list(...); |
当然你也可以给列表中的参数命名,如下:
1 | list(name1=object1,....) |
数据的输入
R
可以从键盘,文本文件,Excel和Access,流行的统计软件,特殊格式的文件以及多种关系数据库导入数据。
关于向R中导入数据的权威指南参见R Data Import/Export手册
使用键盘输入数据
使用edit()
函数调用产生一个输入数据的文本框,输入数据即可完成键入数据。代码示例:
1 | # 创建一个数据框 |
弹出输入数据的文本框样式:
character(0)
是空字符型创建,numeric(0)
是空数值型,logical(0)
是空逻辑型
从带分隔符的文本文件导入数据
即从常规的TXT
文本中读取数据,需要注意的是该文件需要是ASCII
编码的文件。
关于如何查看
TXT
文件是否是ASCII
编码以及如何转换成ASCII
编码的文件请自行百度
读取需要使用read.table()
函数,函数原型如下:
1 | read.table(file, header = FALSE, sep = "", quote = "\"'", |
file
:即文件路径header
:(布尔值)即文件开头的是否是变量而不是数据sep
:自定义数据分隔符,默认为空格row.names
:自定义行名称col.names
:自定义列名称
文件路径如果提供的是相对路径,则需要将文件放在工作目录下,如果是绝对路径则不需要,绝对路径使用正斜杠。
文本文件内容如下,第一行为列名称,数据通过|
分割。
1 | 姓名|班级 |
需要注意的是在Win中,
TXT
文件最后需要以回车结尾,至于为什么可以参考CRLF和LF的差异
代码示例:
1 | # 读取文本文件内容 |
导入Excel数据
读取Excel最好的方式是将Excel导出为csv
文件(逗号分隔文件),然后使用前面的读取文本来读取。
使用R包读取Excel数据
在Windows系统中,可以使用RODBC
包来访问Excel文件。电子表格第一行应当包含变量/列的名称。
首先,下载安装RODBC
包:
1 | install.packages('RODBC') |
使用该包读取Excel文件,Excel文件内容如下:
1 | 姓名 班级 学号 |
代码示例:
1 | # 载入RODBC包 |
A <- odbcConnectExcel2007('test.xlsx')
:A是打开Excel的一个链接通路,传入参数为Excel文件路径a <- sqlFetch(A,'Sheet1')
:第一个参数传入打开的通路,第二个参数是表示第几个表
如果你在
library(RODBC)
的时候报需要更高版本R的支持,可以选择手动导入旧版本包或者更新R版本
当然,如果觉得上述繁琐,有一个最简单的方法,使用xlsx
宏包中的 read.xlsx()
函数。函数原型:
1 | read.xlsx( |
file
:文件路径sheetIndex
:文件中第几个表的索引
代码示例:
1 | library(xlsx) |
从剪切板上读取Excel数据
通过将要输入的内容复制到剪切板,然后读取剪切板的内容来输入数据。
通过read.delim('clipboard')
函数来实现。
在运行该函数之前,务必先复制正确的数据内容
从网页抓取数据
暂欠
从XML中导入数据
暂欠
访问数据框系统
如果写过程序的小伙伴可能会很熟悉这里,使用RODBC
包提供的接口来链接数据库,该方法几乎可以连接市面上所有数据库系统。包中相关函数说明如下:
注:在使用
RODBC
包访问数据库之前,需要根据自己的电脑下载相关的ODBC
驱动。
函数 | 说明 |
---|---|
odbcConnect(dsn,uid="",pwd="") |
建立数据库的连接 |
sqlFetch(channel,sqltable) |
读取数据库中的某个表到一个数据框中 |
sqlQuery(channel,query) |
向数据框提交查询并返回一个结果 |
sqlSave(channel,mydf,tablename="",append=FALSE) |
将数据框写入或者更新(append=True )到数据库中的某个表 |
sqlDrop(channel,sqtable) |
删除数据库中的某个表 |
close(channel) |
关闭数据库的连接 |
该包提供的是面向数据库的双向通路,既可以读取数据库也可以写入数据库。
关于该包的更多更详细的用法,自行查看包的相关说明。