创建数据集之向量

  • 建立向量

一、我们可以直接建立一个向量

a <- 5
b <- TRUE
c <- "北京"

在R语言中,TRUEFASLE要全部大写。

二、用c()函数创建多个向量

a <- c(1,2,5,3,6,-2,4)
b <- c("one","two","three")
c <- c(TRUE,TRUE,TRUE,FALSE,TRUE,FALSE)
d <- c(1:10)                                    #输出110,括号可以省略
x <- c()

最后一个建立了一个空向量,这样的好处是便于今后好加入新的值。

三、使用seq()函数生成等差序列的向量

sep函数的原型如下:

seq(from = 1,to = 1,by = ((to - from)/(length.out - 1)),length.out = NULL,along.with = NULL,...)
seq_along(along.with)
seq_len(length.out)

其中from是首项,默认为1;to是末项,默认为1;by是步长或等差增量,可以为负数,当没有指定to末项的时候,默认为1;length.out是向量的长度(length.out通常缩写为lengthlen);along.with用于指明该向量与另外一个向量的长度相同,along.with后应为另外一个向量的名字。

例子:

seq(from = 1, to = 10)                          #从1输出到10
seq(1,10,2)                                     #从1开始,步长为2,最大不超过10seq(1,9,length = 5)                             #从1开始,最大不超过9,输出5个,系统可以自动计算步长
s3 <- seq(3,by = 3,length = 5)                  #输出3 6 9 11 14
s4 <- seq(by = 3,along.with = s3)               #长度与s3一致,输出1 4 7 10 13
#在没指定其他参数的情况下,使用seq_along更为方便
s4 <- seq_along(s3)
seq(length.out = 4)                             #输出1 2 3 4
#在没指定其他参数的情况下,使用seq_len更为方便
seq_len(4)

四、使用rep()函数创建重复序列的向量

rep函数的原型如下:

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

其中x为要重复的序列对象;times为重复的次数,默认为1;length.out 为产生的向量长度,默认为NA(未限制);each为每个元素重复的次数,默认为1。

例子:

rep(1:3,2)                           #输出1 2 3 1 2 3。前面的序列按原顺序重复2rep(1:3, each = 2)                   #输出1 1 2 2 3 3。序列中的每个元素重复2次。
rep(c(2,5),c(3,4))                   #输出2 2 2 5 5 5 5 5,将向量c(2,5)按照后面给出的次数向量依次重复3次和4次。
#或者使用
x <- c(3,4)
rep(c(2,5),x)                        #也可以将y <- c(2,5),然后输出rep(y,x)
rep(c(2,4,6),each = 2,times = 3)     #输出2 2 4 4 6 6 2 2 4 4 6 6 2 2 4 4 6 6。每项2次,整体3次。
rep(c(2,4,6),times=3,length.out=5)   #输出2 4 6 2 4。整体应该重复3次,但这里规定了长度,所以只有5项。
  • 给元素命名

使用names()函数:

vn <- c(11,22,33,44)
names(vn) <- c("one","two","three","four")          #对应元素的名字分别为one, two, three, four。
#或者使用
vn <- c(11,22,33,44)
myName <- c("one","two","three","four")
names(vn) <- myName
  • 向量的索引

一、使用元素的位置索引

vc <- c(11,22,33,44,55,66)
vc[1]                               #提取第一个元素
vc[1:3]                             #提取第一个到第三个元素
vc[c(2,4,5)]                        #提取第二、四、五个元素
vc[-1]                              #提取除第一个元素之外的元素值
vc[-(1:3)]                          #提取除第一个到第三个元素之外的元素值
vc[-c(2,4,5)]                       #提取除第二、四、五个之外的元素值

注意:在R语言中,下标是从1开始的。

二、使用逻辑向量

vc <- c(11,22,33,44,55,66)
vc[c(TRUE,TRUE,FALSE,FALSE,TRUE,FALSE)]        #提取对应位置为TRUE的元素值
#或者使用
x <- c(TRUE,TRUE,FALSE,FALSE,TRUE,FALSE)
vc[x]
vc[c(TRUE,FALSE)]                              #输出11 33 55
#这里的c(TRUE,FALSE)自动补齐到与vc向量长度相同,即
c(TRUE,FALSE,TRUE,FALSE,TRUE,FALSE)

三、使用元素名字

首先我们先要给向量中的每个元素命名

vc <- c(11,22,33,44,55,66)
names(vc) <- c("one","two","three","four","five","six")
vc["one"]                      #提取名称为"one"的元素,即11。
vc[c("one","three","six")]      #输出11 33 66

在这里插入图片描述图一

四、使用which()函数进行筛选

vc <- c(11,22,33,44,55,66)
which(vc == 11)                       #输出元素11的位置,即1。
which.min(vc)                         #找出最小元素所在的位置:1。
which.max(vc)                         #找出最大元素值所在的位置:6which(vc == 11 | vc == 33)            #找出向量vc中元素值为1133的元素所在位置:1 3which(vc > 11 & vc <= 44)             #找出元素值大于11且小于44的元素所在位置:2 3 4。
vc[vc > 20 & vc < 60]                 #输出22 33 44 55。          
#使用下面的代码也是等价的
vc[which(vc > 20 & vc < 60)]

在这里插入图片描述图二

注意:which函数输出的是元素值的位置,而不是元素值本身;which函数括号内可以是逻辑表达式。

五、使用subset()函数索引

vc <- c(11,22,33,44,55,66)
subset(vc,c(TRUE,FALSE,TRUE))                    #输出11 33 44 66。逻辑向量通过重复自动补齐
subset(vc,vc > 11 & vc < 55)                     #输出22 33 44

在这里插入图片描述图三

用subset()函数进行筛选时,筛选过程中会自动忽略掉NA值,这是个很方便的去掉NA值的特性。

  • 向量的编辑

一、扩展向量

vc <- c(11,22,33,44)
vc <- c(vc,c(55,66))                                   #输出11 22 33 44 55 66
#或者使用下面的形式
mc <- c(55,66) 
vc <- c(vc,mc)

还可以使用append()函数。append()函数的函数原型如下:

append(x,values,after = length(x))

其中x是要附加值的向量。values包含在修饰向量。after是下标,之后要附加值。

例子:

vc <- c(1:5)                   #输出1 2 3 4 5
mc <- c(0:1)                   #输出0 1
append(vc,mc,after = 3)        #在3的后面加上0 1,输出1 2 3 0 1 4 5

只使用append()函数追加元素会生成一个新的向量,不会改变原向量的值。

二、改变元素的值

vc <- c(11,22,33,44,55,66)
vc[1] <- 111                    #查找并引用元素1,直接将111赋给vc[1]
vc[1:3] <- 111                  #向量vc中第一个到第三个元素的值都变为111
vc[1:3] <- c(111,222,333)       #向量vc中第一个到第三个元素的值分别被修改为111 222 333
vc[vc > 33] <- 11               #将向量vc中的所有元素值大于 33 的元素值修改为11
vc[vc == 33] <- 11              #将向量vc中元素值为33的元素值修改为11

三、删除元素

vc <- c(11,22,33,44,55,66)
vc <- vc[-1]                    #先提取除第一个元素以外的值,再将这些值赋给vc。输出22 33 44 55 66
vc <- vc[-c(3:5)]               #从vc中删除了位置为3,4,5的元素
vc <- vc[c(2:4)]                #删除了出位置为2,3,4之外的元素(提取元素2,3,4
  • 向量的排序

一、sort()函数

sort()函数原型如下:

sort(x,decreasing = FALSE,na.last = NA,index.return = FALSE)

其中x为要排序的对象;decreasing为排序顺序,默认为FALSE,即升序,TRUE为降序;na.last是对NAmissing value或者Not available)值的处理。若为TRUE,则NA值将放在最后,若为FALSENA值将放在最前面,若为NA,则排序时剔除掉NA值;index.return是逻辑参数。

例子:

vc <- c(10,NA,9,10,8,8,13,10,10,10,12)
sort(vc)                                #输出8 8 9 10 10 10 10 10 12 13。默认升序排序,NA值不参与排序,且被剔除掉
sort(vc,decreasing = TRUE)              #降序排序,NA值默认被剔除掉
sort(vc,na.last = TRUE)                 #输出8 8 9 10 10 10 10 10 12 13 NA。默认升序排序,NA值不被剔除掉,且放在排序序列的后面
sort(vc,na.last = FALSE)                #输出NA 8 8 9 10 10 10 10 10 12 13。默认升序排序,NA值不被剔除掉,且放在排序序列的前面
sort(vc, index.return = TRUE)           输出8 8 9 10 10 10 10 10 12 13。返回排序结果的位置索引值。即输出排序后的元素在原向量组的位置

注意:排序生成新的序列,不会影响原向量的值及顺序。

在这里插入图片描述图五

二、order()函数

order()函数原型如下:

order(...,na.last = TRUE,decreasing = FALSE)

order()函数里的参数与sort()函数类似,不再进行重复。

例子:

x <- c(34,234,NA,3,1)
order(x)                            #输出5 4 1 2 3

order()函数与sort(x,index.return = TRUE)是类似的。

在这里插入图片描述图六

类似的还有rank()函数。

在这里插入图片描述图七

order()函数与rank()函数的区别:

在这里插入图片描述图八

三、rev()函数

rev()函数将向量倒序,即将原向量的元素按位置翻转。

vc <- c(11,44,33,22,77,66)
rev(vc)                                  #输出66 77 22 33 44 11
sort(vc,reductioning = TRUE)            #与上面的是等价的

类似地用法还可以用在降序排序中:

a <- c("e", "g", "a", "c")
rev(sort(a))

sort(a)先将序列排列成:"a","c","e","g"。然后rev(sort(a))把序列的顺序倒过来:"g","e","c","a"

  • 参考资料

《R语言实战》第二版

R语言入门基础

seq函数的使用帮助

rep函数的使用帮助

names函数的使用帮助

which函数的使用帮助

subset函数的使用帮助

append函数的使用帮助

sort函数的使用帮助

order函数的使用帮助

rank函数的使用帮助

rev函数的使用帮助

上述的使用帮助都可以使用help函数进行查询。

猜你喜欢

转载自blog.csdn.net/weixin_46784010/article/details/107190376
今日推荐