ITPub博客

首页 > > > 【R语言基础】02. 基本数据结构

【R语言基础】02. 基本数据结构

作者:浪花小雨滴 时间:2020-06-17 10:51:11 0 删除 编辑

一、基本数据类型

包括数值型(numeric)、逻辑型(logical)、字符型(character)、缺失值(NA)、浮点型(double)、复数型(complex)、整数型(integer)等。

数据类型的判别与转换都是统一的格式,例如,is.numeric()判断是否为数值型,as.numeric()转换为数值型。

查看对象的类型,用函数class()/typeof()/mode(),基本格式相同:

class(x)

其中,x为要查看的对象。

注:在展现数据的细节上,mode()<class()<typeof();str(x)显示对象x的结构

二、数据结构

1. 向量

向量是R语言中最基本的数据类型,是以一维数组管理数据的一种对象类型,可以是数值型、字符型、逻辑值型、复数型。

注意:同一向量不能混杂多种不同类型的数据。

(1) 创建向量


通过函数c()实现组合功能,例如

x1<-c(2,3,5,7,10)
x1
[1] 2 3 5 7 10
x2<-c("a","b","c")
x2
[1] "a" "b" "c"

(2) 向量索引

下标索引:(R语言中下标是从1开始的),例如

x[1]——返回x的第1个元素

x[-1]——返回除第一个元素之外的所有元素

x[2:4]——返回x的第2至4个元素

x[-(2:4)]——返回x的除第2至4元素之外的所有元素(删除元素)

名称索引:先给向量中的每个元素命名,再通过名称访问对应的元素。

which元素位置:通过函数which()返回逻辑向量中为TRUE的位置(下标);which.max(x), which.min(x)返回向量x中最大值、最小值所在的位置。

x1[which(x1>3 & x1<8)] #返回满足条件的元素

subset生成子集:检索向量中满足条件的元素,提取出来:

subset(x1,x1>3 & x1<8) #结果同上

match匹配:match(x1,x2) 逐个检查向量x1中元素是否在向量x2中,若是则返回该元素,否则返回NA。

%in%检查是否属于:x1 %in% x2 逐个判断向量x1中元素是否属于向量x2。

(3)向量的编辑

对已创建向量进行增加或删除元素。

x<-c(x1,c(6,7,8)) #增加一个向量
x[10]=10 #增加第10个元素,前面空位置用NA补齐

x<-x[-c(3,5)] #删除第3和第5个元素

(4)创建等差序列

函数seq(),基本格式为:

seq(from=1,to=...,by=...,length.out=...,along.with =...)

其中,from, to设置首项、尾项;

by设置等差值(默认为1或-1);

length.out设置序列长度;

along.with以该参数的长度作为序列长度。

(5)创建重复序列

函数rep(),基本格式为:

rep(x,times=...,each=1,length.out=...)

其中,x为要重复的序列;

times设置序列重复次数;

each设置每个元素分别重复的次数;

length.out设置产生的序列的长度;

2. 矩阵

矩阵是二维数组,可以描述二维数据,也要求矩阵内各元素有相同的类型。

(1)创建矩阵

函数matrix(),基本格式为:

matrix(x, nrow=..., ncol=..., byrow=FALSE, dimnames=...)

其中,x为数据向量作为矩阵的元素;

nrow设定行数;

ncol设定列数;

byrow设置是否按行填充,默认为FALSE按列填充;

dimnames用字符型向量表示矩阵的行名和列名。

(2)矩阵索引

a[i,j]——返回矩阵a的第i行,第j列的元素
c["r2","c1"]——返回矩阵c的名称为“r2”的行,“c1”的列对应的元素
a[i,]——返回矩阵a的第i行
a[,j]——返回矩阵a的第j列

a[c(i:j),]——返回矩阵a的第i至第j行

dim(x)——返回矩阵x的维数(几行×几列)

(3)矩阵的编辑

函数rbind(A,B), 纵向合并(增加行),要求列数相同;

函数cbind(C,D), 横向合并(增加列),要求行数相同。

注意:rbind(A,1)相当于给矩阵A增加一行“1”。

a[-1,]——删除矩阵a的第1行

a[,-1]——删除矩阵a的第1列

a[-c(2:4),]——删除矩阵a的第2至4行

(4) 矩阵简单操作

nrow(A),ncol(A)——矩阵A的行数、列数;

dim(A)——矩阵A的维数;

rowSums(A), rowMeans(A), colSums(A), colMeans(A)——按行按列求和、求均值;

t(A)——A转置


3. 数据框(数据表)

R语言中做统计分析的样本数据,都是按数据框类型操作的。数据框的每一列代表一个变量属性的所有取值,每一行代表一条样本数据。

(1) 创建数据框

通过函数data.frame()把多个向量组合起来创建,并设置列名称。其基本格式为:

data.frame(col1=,col2=,col3=,...)

其中,col1, col2, col3, …为列名,其赋值向量可以为任意类型。

注:矩阵也可以通过函数data.frame()转化为数据库。

iris<-data.frame(Sepal.Length=c(5.1,4.9,4.7,4.6), 
Sepal.Width=c(3.5,3.0,3.2,3.1), 
Petal.Length=c(1.4,1.4,1.3,1.5), 
Petal.Width=rep(0.2,4))
iris
  Sepal.Length Sepal.Width Petal.Length Petal.Width
1          5.1         3.5          1.4         0.2
2          4.9         3.0          1.4         0.2
3          4.7         3.2          1.3         0.2
4          4.6         3.1          1.5         0.2

(2) 数据框索引

列标或列名称索引:

iris[,1], iris$Sepal.Length, iris["Sepal.Length"]

——都是返回数据框iris的第1列;

行索引:

iris[1,]——返回数据框iris的第1行

iris[1:3,]——返回数据框iris的第1至3行

元素索引:

iris[1,1]或iris$Sepal.Length[1] 或iris["Sepal.Length"][1]

——都是返回数据框iris的第1列第1个数据

用函数subset()按条件索引:subset(data_iris,Sepal.Length<5)

(3) 数据框的编辑

类似矩阵操作,可通过函数rbind(),增加行(样本数据),要求宽度(列数)相同;函数cbind(),增加列(变量),要求高度(行数)相同。

删除样本(行),类似矩阵操作。

用函数names()查看或修改数据框的列名。

4. 因子

变量分为名义型(无顺序好坏之分的分类变量,如性别)、有序型(有顺序好坏之分的分类变量,如疗效)、连续型(通常的数值变量,可带小数位)。

名义型和有序型的类别变量,在R语言中称为因子。

因子提供了一个简单且紧凑的形式来处理分类数据,因子用水平来表示所有可能的取值,例如,性别有两个水平:男、女。

(1) 创建因子

使用函数factor(),基本格式为:

factor(x, levels, labels=..., exclude=...,

ordered=TRUE, nmax=...)

其中,x为创建因子的数据向量;

levels指定因子的水平数,默认为x中不重复的所有值;

labels设置各水平名称(前缀),与水平一一对应;

exclude指定有哪些水平是不需要的;

ordered设置是否对因子水平排序,默认为TRUE有序因子;

nmax设定水平数的上限。

ff<-factor(substring("statistics",1:10,1:10),levels=letters) 
ff
 [1] s t a t i s t i c s
Levels: a b c d e f g h i j k l m n o p q r s t u v w x y z
ff[,drop=TRUE] #去掉未包含在向量中的水平,同f.<-factor(ff)
 [1] s t a t i s t i c s
Levels: a c i s t
factor(1:5,labels="let")
 [1] let1  let2  let3  let4  let5
Levels: let1 let2 let3 let4 let5
factor(LETTERS[3:1],ordered = TRUE)
[1] C B A
Levels: A < B < C

注:函数substring()用来提取字符串的子串,第2个参数是起始位置,第3个参数是终止位置;letters和LETTERS是R中专有变量,表示26个小写/大写字母组成的字符向量。

也可以用函数gl()生成不同水平的因子序列,基本格式为:

gl(n, k, length=, labels=, ordered=FALSE)

其中,n表示因子水平数;

k表示每个水平的重复数;

length表示生成序列的长度,默认n×k;

labels为表示因子水平的向量,默认1:n;

ordered指定是否为有序因子,默认FALSE无序因子。

gl(3,2,ordered = TRUE) #生成水平数为3,每个水平重复2次的有序因子序列
[1] 1 1 2 2 3 3
Levels: 1 < 2 < 3

注:R语言中,因子是以整数型向量存储的,每个因子水平对应一个整数型的数。对字符型向量创建的因子,会按照字母顺序排序,再对应到整数型向量。

5. 列表

列表就是一些对象或成分的有序集合(组合方式更自由)。列表允许整合若干对象到单个对象名下,例如,某个列表可能是若干向量、矩阵、数据框,甚至是其它列表的组合。

列表常用来存储较复杂的数据对象。列表提供了一种简单的方式来组织和访用不相干的对象。另外,R语言中许多函数的运行结果都是用列表形式返回的。

(1) 创建列表

用函数list(),基本格式为:

list(name1=object1,name2=object2,...)

其中,object对象可以是任何类型。

data<-list(a=c(1,2,3,4),b=c("one","two","three"),c=c(TRUE,FALSE),d=(1+2i))
data
$a
[1] 1 2 3 4
$b
[1] "one"   "two"   "three"
$c
[1]  TRUE FALSE
$d
[1] 1+2i

(2) 列表索引

与数据框操作类似,但是用双重方括号。

data[[1]]或data[["a"]]——返回列表data的第1列

data$a——返回列表data的名称为a的列

data[[1]][1]——返回列表data的第1列的第1个元素

(3) 列表的编辑

与向量的编辑类似,使用函数c()进行合并。

主要参考文献

  1. 张良均,谢佳标,杨坦,肖刚. R语言与数据挖掘. 机械工业出版社,2016.

作者:张敬信
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3131845/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: Docker测试PL-VIO
请登录后发表评论 登录
全部评论

注册时间:2018-05-16

  • 博文量
    4259
  • 访问量
    39890