龙空技术网

R语言数据类型和向量

银河统计工作室 116

前言:

而今朋友们对“怎么求vector的长度”可能比较注重,大家都需要知道一些“怎么求vector的长度”的相关资讯。那么小编也在网摘上搜集了一些有关“怎么求vector的长度””的相关资讯,希望小伙伴们能喜欢,我们快快来学习一下吧!

R语言中的数据类型定义了数据的特征和属性,同时也决定了数据可以进行的操作和分析方法;R语言中的向量可以用来存储和操作一系列的数值或字符数据。

一、R语言数据类型

1、Numeric(数字型)

例子: 12.3,5,999代码:

 v <- 23.5print(class(v))
输出: [1] "numeric"

2、Integer(整型)

例子: 12L,5L,9L代码:

v <- 40Lprint(class(v))
输出: [1] "integer"

如果例子中整数没有字母“L”,

例子: 12,5,9代码:

v <- 40print(class(v))
输出: [1] "numeric"

3、Logical(逻辑型)

例子: TRUE, FALSE代码:

v <- TRUEprint(class(v))
输出: [1] "logical"

4、Complex(复数型)

例子: 3 + 2i代码:

v <- 2+5iprint(class(v))
输出: [1] "complex"

5、Character(字符型)

例子: "abcd"代码:

v <- "Hello world"print(class(v))
输出: [1] "character"

6、Raw(原型)

例子: "Hello" 被存储为二进制格式 48 65 6c 6c 6f代码:

v <- charToRaw("Hello")print(class(v))
输出: [1] "raw"

注:代码print(class(v))和mode(v)输出结果一样

判别和转换数据类型的函数如下表:

数据类型

判别函数

转换函数

备注

character

is.character()

as.character()

字符型

complex

is.complex()

as.complex()

复数型

double

is.double()

as.double()

双精度数值型

integer

is.integer()

as.integer()

整型数值型

logical

is.logical()

as.logical()

逻辑型

NA

is.na()

as.na()

缺失值

numeric

is.numeric()

as.numeric()

混合数值型(默认双精度型)

raw

is.raw()

as.raw()

原型(二进制)

二、向量(vector)-数据对象

在R语言中,向量(Vector)是相同基本类型元素组成的序列,相当于一维数组。向量的元素可以是数值型、字符型、逻辑值型和复数型,分别称为数值型向量、字符串型向量、逻辑型向量和复数型向量。向量中可以包含一个元素,也可以包含多个元素。同一个向量中的数据类型应该相同。

1、直接创建向量

x1<-1:10 #输出:[1] 1 2 3 4 5 6 7 8 9 10x2<-4.3 #只包含一个值的向量(标量)x3<-TRUE #逻辑型向量,注意在R中,TRUE和FALSE必须大写x4<- "I Love China" #字符串型向量

在R语言中"#"是注释符,即#后面的内容是注释的内容,是对该行内容的一个解释。

2、使用c()函数创建向量

v1<-c(1,3,4,9,10) #输出1 3 4 9 10v2<-c(1:10) #创建1到10的向量,#输出:1 2 3 4 5 6 7 8 9 10v3<-c("Male","Female", "Female", "Male") #字符串型向量v4<-c(TRUE,FALSE,FALSE,TRUE) #逻辑型向量v5<-c() #一个不包含任何值的向量 输出NULL

在R语言中,c()函数可以有任意多个参数。

3、使用seq函数生成等差序列的向量

seq函数的原型如下:

函数: seq(from=1,to=1,by=((to-from)/(length.out - 1)),length.out = NULL,along.with = NULL,...)参数: from是首项,默认为1;to是末项,默认为1;by是步长或等差增量,可以为负数;length.out是向量的长度;along.with用于指明该向量与另外一个向量的长度相同,along.with后应为另外一个向量的名字。

s1 <- seq(1,10,2) #向量从1开始,步长为2,最大不超过10,#这里输出:1 3 5 7 9s2 <- seq(1,9,length.out=5) #输出1 3 5 7 9,#这里的步长是根据(9 - 1)/(5-1)计算出来的s3 <- seq(3,by=3,length.out=5) #输出3 6 9 12 15s4 <- seq(by=3,along.with=s3) #输出1 4 7 10 13,未指定from项时,默认从1开始,#长度与向量s3相同s5 <- seq(length.out=3) #输出1 2 3s6 <- seq(along.with=s5) #输出 1 2 3s7 <- seq(9,by=-2,length.out=6)#输出 9 7 5 3 1 -1

进一步说明:这里的from,to,by项可以为任意实数,即也可以为浮点数;seq(1,9,length.out=5)等价于seq(1,9,length)

4、使用rep函数创建重复序列的向量

rep函数可以将某一向量重复若干次,该函数的原型如下:

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

r1<-rep(1:3,2) #输出1 2 3 1 2 3#前面的序列按原顺序重复2次r2<-rep(1:3, each =2) #输出1 1 2 2 3 3#序列中的每个元素重复2次r3<-rep(c(2,5),c(3,4)) #输出2 2 2 5 5 5 5 5#将向量c(2, 5)按照后面#给出的次数向量依次重复3次和4次r4<-rep(c(2,4,6),each=2 ,length.out = 5)#输出2 2 4 4 6#由于规定长度为5,这里仅有5项r5<-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次r6<-rep(c(2,4,6),times=3,length.out=5) #输出2 4 6 2 4 整体应该重复3次,#但这里规定了长度,所以只有5项

5、为向量的每个元素命名

v <- c(11,22,33,44)names(v) <- c("one","two","three","four") #对应元素的名字分别#为one, two, three, fournames(v)[1] #输出"one"v[[1]] #输出11

6、向量的引用

(1)使用元素的位置引用

v <- c(11,22,33,44,55,66) #创建一个向量用于引用v[1] #提取第一个元素值:11v[1:3] #提取1~3个元素的值:11 22 33v[c(2,4,5)] #提取第2、第4和第5个元素的值:22 44 55v[-1] #提取除第一个元素之外的元素值:22 33 44 55 66v[-(1:3)] #提取除1~3个元素之外的元素值:44 55 66v[-c(2,4,5)] #提取除第2、第4和第5个之外的元素值:11 33 66

(2)使用逻辑向量

v <- c(11,22,33,44,55,66) #创建一个向量用于引用v[c(TRUE,TRUE,FALSE,FALSE,TRUE,FALSE)] #提取对应位置为TRUE的元素值:11 22 55v[c(TRUE,FALSE)] #输出11 33 55 这里的c(TRUE,FALSE)自动补齐#到与v向量长度相同再提取和TRUE对应的元素,#c(TRUE,FALSE,TRUE,FALSE,TRUE,FALSE)v[c(TRUE,TRUE,FALSE)] #输出11 22 44 55

(3)使用元素名字

v <- c(11,22,33,44,55,66) #创建一个向量用于引用names(v) <- c("one","two","three","four","five","six")#为每个元素命名为one,two,three,four,five,sixv["one"] #输出11(在此值上方会有其名字one)#这种方法只能用于访问一个元素的情况v[c("one","three","six")] #输出11 33 66 (其上方会带有其对应的名字)

(4)使用which函数进行筛选

v <- c(11,22,33,44,55,66) #创建一个向量用于筛选which(v==11) #找出向量v中元素值为11的元素位置,#这里输出1,即11在vc中的位置为:1which(v==11|v==33)) #找出向量vc中元素值为11或33的元素所在位置:1 3which(v>11 & v<=44) #找出元素值大于11且小于44的元素所在位置:2 3 4which.max(v) #最大元素值所在的位置:6which.min(v) #最小元素所在的位置:1

(5)使用subset函数索引

可以使用subset函数找出向量中满足给定条件的向量元素值,语法格式如下:

函数:subset(向量名,逻辑条件)功能:返回向量中满足逻辑条件的元素

v <- c(11,22,33,44,55,66) #创建一个向量用于查找subset(v,v>11 & v<55) #得到 22 33 44subset(v,c(TRUE,FALSE,TRUE)) #得到 11 33 44 66 逻辑向量通过重复自动补齐

(6)match函数

该函数的原型为:

函数:match(x,y)功能:返回x中的每个元素在y中对应的位置,如果x中的元素在y中不存在,则该位置返回NA

v <- c(11,22,33,44,55,66) #创建一个向量用于查找match(v,c(11,22)) #得到 1 2 NA NA NA NA#因为x中的33 44 55 66在c(11,22)中不存在,#所以后面4个为NAmatch(v,c(11,33,55,66,88,99)) #得到 1 NA 2 NA 3 4#vc中的22在给定的序列中不存在所以第2个为NA,#33在给定的序列位置为2,所以v中的第3个元素位置为2...

7、向量的编辑

(1)扩展向量

v<-c(11,22,33,44) #创建一个向量v<-c(v,c(55,66)) #给v扩展,增加了2个元素55和66v<-append(v,77) #在向量最后追加一个新元素77v<-append(v,c(88,99)) #在向量后追加连个元素88和99v<-append(v,100,3) #在第3个元素后追加一个新元素100:11 22 33 100 44 55 66 77 88 99

注意,使用append追加元素会生成一个新的向量,不是直接在原向量中追加,看下面的例子:

v<- c(11,22,33)append(v,c(44,55))v #若重新输出v,会发现v的向量值元素仍然为:11 22 33,#并没有发生变化。

只有这样,

v<- c(11,22,33)v <- append(v,c(44,55)) #重新打印v的值为:11 22 33 44 55

(2)改变元素的值

v<- c(11,22,33) #用于修改的向量v[1] <- 111 #向量v的第一个元素值变为111v[1:3] <- 111 #向量v中第1~第3个元素的值都变为111v[1:3] <- c(111,222,333) #向量v中第1~第3个元素的值分别被修改为111 222 333v[v>33] <- 11 #将向量v中的所有元素值大于33的元素值修改为11v[v==33] <- 11 #将向量v中元素值为33的元素值修改为11

(3)删除元素

v<-c(11,22,33,44,55,66) #用于删除的向量v<-v[-1] #从v中删除了位置为1的元素v<-v[-c(3:5)] #从v中删除了位置为3,4,5的元素v<-v[-c(2:4)] #删除了除位置为2,3,4之外的元素

8、向量的排序

(1)sort函数

sort函数原型如下:

函数:sort(x, decreasing=FALSE,na.last = NA,index.return = FALSE,...)功能:x为要排序的对象,decreasing为排序顺序,默认为FALSE,即升序;na.last是对NA(mising value或者Not available)值的处理,若为TRUE,则NA值将放在最后,若为FALSE,NA值将放在最前面,若为NA,则排序时剔除掉NA值;index.return是个逻辑值,设置是否显示排序序列对应的元素值在未排序前序列中的对应位置索引,默认为FALSE。

sort可以使用的的形式如下:

v<-c(11,22,33,44,55,66) #用于排序的向量sort(v) #默认升序排序,NA值不参与排序,且被剔除掉,#即若v中有NA值的话,排序后的序列中不含有NA值sort(v,decreasing=TRUE) #降序排序,NA值默认被剔除掉sort(v,na.last = TRUE) #默认升序排序,NA值不被剔除掉,且放在排序序列的后面

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

(2)rev函数

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

v <- c(11,44,33,22,77,66) #创建一个向量rev(v) #66 77 22 33 44 11

9、用于向量的一些函数

首先,建立两个向量:

v <- c(1:10) #创建一个新向量:1 2 3 4 5 6 7 8 9 10v1<- c(1:9) #创建一个新向量:1 2 3 4 5 6 7 8 9

(1)求和函数sum()

sum(v) #输出 55

(2)求最大值函数max()

max(v) #输出 10

(3)求最小值函数min()

min(v) #输出 1

(4)求均值函数mean()

mean(v) #输出 5.5

(5)求中位数函数median()

median(v) #输出 5.5median(v1) #输出 5

(6)range()函数

range(v) #输出 1 10range(v1) #输出 1 9

相当于c(min(x), max(x))。

(7)求方差函数var()

var(v) #输出 9.166667var(v1) #输出 7.5

(8)求标准差函数 sd()

sd(v) #输出 3.02765sd(v1) #输出 2.738613

(9)求向量元素值连乘积prod()

prod(v) #3628800prod(v1) #362880

(10)累加和向量函数cumsum(x)

结果是一个向量,长度与x相同,每一项的值是该项与前一项累加后的值。

cumsum(v1) #输出 1 3 6 10 15 21 28 36 45cumsum(v) #输出 1 3 6 10 15 21 28 36 45 55

(11)秩次函数rank(x)

v <- c(6.8, 8.1, 7.2)rank(v) #输出 1 3 2rank(-v) #输出 3 1 2

R语言中的向量是一种非常重要的数据结构,因为它可以用来存储和操作一系列的数值或字符数据。以下是一些向量的重要性:

简单易用:向量是R语言中最简单和最基础的数据结构之一。可以轻松地创建、操作和存储向量。存储和处理数据:向量可以用来存储和处理数据。R语言中的大多数数据分析任务都可以使用向量完成,例如计算统计指标、进行数据分析、绘制图表等等。节省空间:使用向量可以节省内存空间。相比于列表和矩阵等其他数据结构,向量占用的内存更小。向量化操作:向量可以支持向量化操作,这是R语言的一个强大特性。向量化操作可以让你同时处理多个数值或字符数据,极大地提高了代码的效率和可读性。集合运算:向量可以用来进行集合运算,例如求并集、交集、补集等操作。基础函数的使用:向量也是很多基础函数的输入和输出,例如求和、排序、计算中位数等等。

总之,向量是R语言中非常重要的一种数据结构,是数据分析和统计建模的基础。

标签: #怎么求vector的长度