首页 > > > 【R语言基础】02. 基本数据结构
包括数值型(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()进行合并。
作者:张敬信
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3131845/ ,如需转载,请注明出处,否则将追究法律责任。