1、数据集的概念
按照某种格式来创建数据集,是任何数据分析的第一步
- 1、选择一种数据结构来存储
- 2、将数据输入或导入到这个数据结构中
向R中导入数据有很多方便的方法,可以手工输入数据,也可以从外部源导入数据,数据源可以是电子表格(excel)、文本文件(txt)、统计软件(SAS)和各类数据库(MYSQL)等。
数据集通常是有数据构成的一个矩形数组,行表示记录,列表示属性(字段)。如下面一个病例清单:
R拥有许多用于存储数据的对象类型,包括向量、矩阵、数组、数据框和列表。
这些数据结构在存储数据的类型、创建方式、定位和访问其中个别元素的方法等方面都有所不同。
2、R的基本数据结构
(1)向量
向量,用于存储数值型,字符型,逻辑型数据的一维数组
同一向量中无法混杂不同模式的数据
a、向量的创建:(关键字c)
- 创造一个包含1到5的数字的向量
> a1 <- c(1:5)
> a2 <- c("one", "two", "three", "two")
> a3 <- c(TRUE, TRUE, FALSE, TRUE)
> a1
[1] 1 2 3 4 5
> a2
[1] "one" "two" "three" "two"
> a3
[1] TRUE TRUE FALSE TRUE
注意: 若混杂不同的数据类型时,里面的值会都被转成字符型,如:
> a4 <- c(1, 3, "three", TRUE)
> a4
[1] "1" "3" "three" "TRUE"
b、添加
- 添加数据
> b <- append(a1,7)
> b
[1] 1 2 3 4 5 7
- 添加向量(在向量a1的第二个位置插入一个向量)
> c <- append(a1,c(8:10),after = 2)
> c
[1] 1 2 8 9 10 3 4 5
c、向量里某个值的获取
- 如想获取向量b的第2个元素6,则:
> b <- c(1, 6, 3, 4, 8, 7)
> b[2]
[1] 6
- 如想获取向量b的第2、5个元素6和8,则:
> b[c(2, 5)]
[1] 6 8
- 如想获取向量b的第2到5个元素,则:
> b[c(2: 5)]
[1] 6 3 4 8
d、常见函数的使用
- 如对
向量b
进行:求和函数sum(b)
、求最大函数max(b)
、求最小函数min(b)
、求平均函数mean(b)
、求方差函数var(b)
、求标准差函数sd(b)
。 - 阶乘
prod(b)
:
> b <- c(1, 2, 3, 4, 5, 7)
> prod(b)
[1] 840
> prod(1:3)
[1] 6
- 排序
sort(b, decreasing = TRUE)
(decreasing为true是从大到小,为false是从小到大)
> b <- c(1, 6, 3, 4, 8, 7)
> sort(b, decreasing = TRUE)
[1] 8 7 6 4 3 1
- 反向
rev(b)
> b <- c(1, 6, 3, 4, 8, 7)
> rev(b)
[1] 7 8 4 3 6 1
> rev(sort(b))
[1] 8 7 6 4 3 1
(2)矩阵
矩阵,用于存储数值型,字符型,逻辑型数据的二维数组
同一向量中无法混杂不同模式的数据
a、矩阵的创建(关键字matrix
)
- 创建一个3行4列的矩阵,默认是按列填充。
- 格式:
matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)
其中参数data
是指定数据集,nrow
是指定行数,ncol
是指定列数,byrow
是指定按行填充还是按列填充,默认为false,即按列填充,为true时是按行填充。dimnames
指定行名和列名。
> mat <- matrix(c(1:12),nrow = 3,ncol = 4)
> mat
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
> x <- c(2,45,68,94)
> rnames <- c("R1","R2")
> cnames <- c("C1","C2")
> newMatrix <- matrix(x, nrow=2, ncol=2, byrow=TRUE, dimnames=list(rnames,cnames))
> newMatrix
C1 C2
R1 2 45
R2 68 94
b、矩阵元素的获取
下面是获取矩阵mat的第2行元素,和获取第三行第二列的元素。取列同理。
> mat <- matrix(c(1:12),nrow = 3,ncol = 4)
> mat <- matrix(c(1:12),nrow = 3,ncol = 4)
> > mat[2,]
[1] 2 5 8 11
> mat[3,2]
[1] 6
- 维度的获取:
> dim(mat)
[1] 3 4
可得到矩阵mat是3行4列
- 添加列名:
> colnames(mat) <- c('序号','语文','英语','数学')
> mat
序号 语文 英语 数学
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
- 逻辑判断
判断第二列是否大于5,返回true或者false。mat[,2] >=5
返回第二列大于等于5的行mat[mat[,2]>=5,]
(3)数组
数组,数组与矩阵类似,但是维度可以大于二
格式: array(data = NA, dim = length(data), dimnames = NULL)
a、数组的创建
创建一个3维数组:
> dim1 <- c("A1", "A2", "A3")
> dim2 <- c("B1", "B2")
> dim3 <- c("C1","C2","C3","C4")
> d <- array(c(1:24), c(3,2,4), dimnames=list(dim1,dim2,dim3))
> d
, , C1
B1 B2
A1 1 4
A2 2 5
A3 3 6
, , C2
B1 B2
A1 7 10
A2 8 11
A3 9 12
, , C3
B1 B2
A1 13 16
A2 14 17
A3 15 18
, , C4
B1 B2
A1 19 22
A2 20 23
A3 21 24
b、获取
- 获取数组维数
dim(d)> dim(d)
[1] 3 2 4
- 获取每一维的第一行第二列的元素
> d[1,2,]
C1 C2 C3 C4
4 10 16 22
- 获取第二维的第三行第一列元素
> d[3,1,2]
[1] 9