r语言rep_R语言速成之第一章 向量(创建,命名,访问)

论坛 期权论坛 脚本     
已经匿名di用户   2022-3-22 00:00   2238   0

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
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP