探索R中的数据结构
数据集
通常是由数据构成的一个矩形数组,行表示观测,列表示变量。
不同学科中行名和列名的学术用语不同:
统计学 | 数据库分析 | 数据挖掘 | |
---|---|---|---|
行 | 观测 | 记录 | 示例 |
列 | 变量 | 字段 | 属性 |
R的数据结构
包括以下六种:标量、向量、矩阵、数组、数据框和列表。且R中编号从1开始而非从0开始。
1、标量是只含一个元素的向量,例如f <- 3、g <- "US"和h <- TRUE。它们用于保存常量。
2、向量是用于存储数值型、字符型或逻辑型数据的一维数组。执行组合功能的函数c()可用来创建向量。单个向量中的数据必须拥有相同的类型或模式\color{red}{单个向量中的数据必 须拥有相同的类型或模式}单个向量中的数据必须拥有相同的类型或模式
访问向量中的元素:
<-c(2,3,4,5,6,7)
> a[3]
[1] 4
> a[c(2,4)]
[1] 3 5
> a[2:5]
[1] 3 4 5 6
3、矩阵
所有矩阵都是二维的且每个元素拥有相同的模式,可通过matrix函数创建。
矩阵的创建和访问
>matrix(1:20,nrow=5,ncol=4)
> y
[,1] [,2] [,3] [,4]
[1,] 1 6 11 16
[2,] 2 7 12 17
[3,] 3 8 13 18
[4,] 4 9 14 19
[5,] 5 10 15 20
> cells<-c(1,22,33,44)
> rnames<-c('R1','R2')
> cnames<-c('C1','C2')
> mymatrix<-matrix(cells,nrow=2,ncol=2,byrow=TRUE,dimnames=list(rnames,cnames))
> mymatrix
C1 C2
R1 1 22
R2 33 44
> cells<-c(1,22,33,44)
> rnames<-c('R1','R2')
> cnames<-c('C1','C2')
> mymatrix<-matrix(cells,nrow=2,ncol=2,byrow=FALSE,dimnames=list(rnames,cnames))
> mymatrix
C1 C2
R1 1 33
R2 22 44
> mymatrix[2,]
C1 C2
22 44
> mymatrix[,2]
R1 R2
33 44
> mymatrix[2,2]
[1] 44
4、数组
超过二维的数据可通过数组表示,用函数array创建
array(vecoter,dimensions,dimnames)
其中dimensions是数值型向量,给出各个维度下标的最大值。
访问时,Z[a,b,c]指访问第c个列表的第a行第b列。
> dim1 <- c("A1", "A2")
> dim2 <- c("B1", "B2", "B3")
> dim3 <- c("C1", "C2", "C3", "C4")
> z <- array(1:24, c(2, 3, 4), dimnames = list(dim1,dim2, dim3))
> z
, , C1
B1 B2 B3
A1 1 3 5
A2 2 4 6
, , C2
B1 B2 B3
A1 7 9 11
A2 8 10 12
, , C3
B1 B2 B3
A1 13 15 17
A2 14 16 18
, , C4
B1 B2 B3
A1 19 21 23
A2 20 22 24
> z[1,2,1]
[1] 3
> z[1,1,2]
[1] 7
> z[1,1,]
C1 C2 C3 C4
1 7 13 19
5、数据框
由于不同的列可以包含不同模式(数值型、字符型等)的数据,数据框的概念较矩阵来说更为一般。
数据框可通过函数data.frame()创建:
mydata<-data.frame(col1,col2,col3…)
数据框的访问的三种方式
>patientID <- c(1, 2, 3, 4)
>age <- c(25, 34, 28, 52)
>diabetes <- c("Type1", "Type2", "Type1", "Type1")
>status <- c("Poor", "Improved", "Excellent", "Poor")
>patientdata <- data.frame(patientID, age, diabetes, status)
>patientdata
patientID age diabetes status
1 1 25 Type1 Poor
2 2 34 Type2 Improved
3 3 28 Type1 Excellent
4 4 52 Type1 Poor
> patientdata[1:2]
patientID age
1 1 25
2 2 34
3 3 28
4 4 52
> patientdata[c("diabetes", "status")]
diabetes status
1 Type1 Poor
2 Type2 Improved
3 Type1 Excellent
4 Type1 Poor
> patientdata$age
[1] 25 34 28 52
最后
R可以处理的数据类型(模式)
包括数值型、字符型、逻辑(TRUE/FALSE)、复数型(虚数)和原生型(字节)。
输入数据
1、最原始的键盘输入法
2、从带分隔符的文本文件导入数据
导入的多是ASCII 文本文件(ASCII文件(ASCII File),指含有用标准ASCII字符集编码的字符的数据和文本文件。文本文件(如字处理文件、批处理文件和源语言程序)通常都是ASCII文件,因为它们只含有字母、数字和常见的符号。)
语法为:
file_newname<-read.table(‘import_file_name’,header=TRUE/FALSE,rowname=‘what’)
例如
grades<-read.table(‘studentgrades.csv’,header=TRUE,sep=’,’,row.name=‘STUDENTID’)
3、导入Excel表格
这一步有很多地方容易出错,在这里提醒自己一下
导入Excel表格可以选择三种包
一种是RODBC,但该包仅适用于32位系统的R
第二种是readxl包,该包可通过函数read_excel()读取xlsx文件且不需要转码,也可以轻松访问文件里的任何元素。
第三种是xlsx包,在用该包导入xlsx文件时需要现配置Java环节且在Rstudio中安装载入rjava和xlsxjars两个包,且导入的Excel表格中含有中文易出现乱码。
我作为新手小白尽管参考了很多大佬的解决方法也还没有解决这个问题,所有还是老老实实用read_excel()函数来导入了。
标注数据
1、用变量标签替代冗长的变量名
2、用factor函数为类别标签创建值标签
小结尾
处理数据对象的实用函数
函数 | 用途 |
---|---|
length(object) | 显示对象中元素/成分的数量 |
dim(object) | 显示某个对象的维度 |
str(object)\color{red}{str(object)}str(object) | 显示某个对象的结构 |
class(object) | 显示某个对象的类或类型 |
mode(object) | 显示某个对象的模式 |
names(object) | 显示某对象中各成分的名称 |
c(object, object,…) | 将对象合并入一个向量 |
cbind(object, object, …) | 按列合并对象 |
Object | 输出某个对象 |
head(object) | 列出某个对象的开始部分 |
tail(object) | 列出某个对象的后部分 |
ls() | 显示当前的对象列表 |
rm(object, object, …) | 删除一个或更多个对象 |
语句rm(list = ls()) | 将删除当前工作环境中的几乎所有对象 |
newobject <- edit(object) | 编辑对象并另存为newobject fix(object) 直接编辑对象 |