1.1向量的创建
1.1.1直接创建
赋值符号用"="或"<-",后者是R语言特有的赋值符号,一般都用后者。
x1<-1:10 #1 2 3 4 5 6 7 8 9 10
x2<-666 #只包含一个值的向量
x3<-TRUE #逻辑型向量,必须大写!
x4<-"TianJin" #字符串型向量,可以为中文!
R语言很神奇的一点是,要把所有代码都选中才能运行,所以一般运行就Ctrl+A然后Ctrl+回车就可以了,并且和一般语言一样,R语言也是区分大小写的,并且你注意到我的注释用的是“#”,这就是单行注释,据说R语言没有多行注释。
1.1.2使用c()函数创建
vl <- c(1,5,8,6,0) #把几个值列出来创建
v1 <- c(1:10) #直接生成1到10
v2<-c("男","女","男","男","女") #生成一个字符串向量
v3<- c(TRUE,FALSE,FALSE,TRUE) #生成一个逻辑型向量
v4<- c() #这是一个空的向量
1.1.3使用seq函数生成等差序列向量
seq()函数一共有5个参数,从左到右分别是
- from:序列的首项,默认为1
- to:序列的尾项
- by:后一项与前一项之差,可为负数,默认为1
- length.out:向量中元素个数
- along.with:表明这个向量与哪个向量的元素个数相同
s0<-seq(1,10) #从1到10,步长为1
s2<-seq(1,9,length.out=5) #从1到9,共5个数
s3<-seq(3,by=3,length.out=5) #从3开始,步长为3,共5个数
s4<-seq(by=3,along.with=s3) #默认从1开始,步长为3,个数与s3一样都是5个
s5<-seq(length.out=4) #默认从1开始,默认步长为1,共4个数
s6<-seq(along.with=s5) #默认从1开始,默认步长为1,个数与s5一样为4个
1.1.4使用rep函数生成重复序列向量
req()函数一共有4个参数,从左到右分别为
- x:要重复的对象,可以是数也可以是序列
- times:序列重复的次数,默认为1
- length.out:向量中元素的个数,如果它被指定,那么其余参数要遵从它
- each:序列中每个元素重复的次数,默认为1
注:优先级length.out>each>times
r1<-rep(1:3,2) #将1到3这个序列重复两次,即1 2 3 1 2 3
r2<-rep(1:3,each=2) #1到3中每个数重复两次,即1 1 2 2 3 3
r3<-rep(c(2,5),c(3,4)) #2重复3次,5重复4次,即2 2 2 5 5 5 5
r4<-rep(c(2,4,6),each=2,length.out=5) #每个数重复两次,但length.out为5,去掉最后一个数,即2 2 4 4 6
r5<-rep(c(2,4,6),each=2,times=3) #每个数重复2次,整体再重复3次,即224466224466224466
r6<-rep(c(2,4,6),times=3,length.out=5) #整体重复3次,但只保留5个,即2 4 6 2 4
1.2用names函数为向量每个元素命名
vn <- c(11,22,33,44)
names(vn) <- c("one","two","three'","four")
#这样向量中每个元素就有了它对应的名字
1.3向量的引用
1.3.1使用元素位置引用
使用方括号引用,负号代表除...之外的元素.
vc - c(11,22,33,44,55,66)
vc[1] #引用第1个元素
vc[1:3] #引用第1到3个元素
vc[c(2,4,5)] #引用第2,4,5个元素
#如果引用中带负号,则表示引用除...之外的元素
vc[-1] #引用除了第1个元素外的其他元素
vc[-(1:3)] #引用除第1到3个元素外的其他元素
vc[-c(2,4,5)] #引用除第2,4,5个元素外的其他元素
值得注意的是,第一个元素的索引是1而不是一般语言所对应的0
1.3.2使用逻辑向量
说白了就是每个位置上赋予一个逻辑型元素,TRUE表示引用,FALSE表示不引用,逻辑向量不够长则循环补齐。
vc - c(11,22,33,44,55,66)
vc[c(TRUE,TRUE,FALSE,FALSE,TRUE,FALSE)] #表示引用第1,2,5
#如果逻辑向量不能对应,则循环补齐
vc[c(TRUE,FALSE)] #将逻辑向量重复循环,等价于c(TRUE,FALSE,TRUE,FALSE,TRUE,FALSE)
1.3.3使用元素名字
首先需要对向量中元素命名,然后方括号引用名字就可以
vc - c(11,22,33,44,55,66)
names(vc)<- c("one","two""three" ,"four" ,"five","six")
vc["one"] #访问one对应的元素
vc[c("one","three","six")] #访问one,three,six对应的元素
注意:如果用c()来访问多个,最后显示的顺序按照c()中的顺序.
1.3.4使用which函数进行筛选
which()里面包含一个逻辑型向量,它会返回逻辑型向量中TRUE对应的位置,而表达式的作用就是将向量转化为逻辑向量.
vc - c(11,22,33,44,55,66)
which(vc==11) #找到值等于11的元素的位置,即1
which(vc==11 | vc==33) #找到值等于11或33的元素的位置,即1,3
which(vc>11 & vc<=44) #找到大于11且小于等于44的元素位置,即2 3 4
which.max(vc) #返回最大元素的位置,即6
which.min(vc) #返回最小元素的位置,即1
1.3.5使用subset函数索引
subset()包括两个参数,从左到右为:向量名+逻辑条件
本质上就是通过逻辑向量引用,但subset可以省去将表达式转化成逻辑向量这一步.
vc - c(11,22,33,44,55,66)
subset(vc,c(TRUE,FALSE,TRUE)) #逻辑向量不够,循环补齐
subset(vc,vc>11 &vc<55) #返回大于11且小于55的元素,即22 33 44
|
|