R语言向量下标操作

向量下标即元素在向量中的位置,在实践中我们可以利用下标(元素的位置)来找出自己想要的数。

利用runif函数生成包含10个正整数的向量x。

options(digits = 1)
set.seed(1234)
x <- runif(10,min = 1,max = 20)
x
 [1]  3 13 13 13 17 13  1  5 14 11

正整数下标

我们可以输入正整数作为下标来找出对应位置的元素。

在[]内输入下标。

#向量x的第一位置的元素
x[1]
[1] 3
#向量x的第2位置的元素
x[2]
[1] 13
x[0]
numeric(0)

与其他编程语言不一样(下标从0开始算起),R的下标是从1开始算起。

在R语言中向量输入0下标返回numeric(0)。

如果在其他语言,如python中输入下标0,则返回向量中第一个位置的元素

负整数下标

如果为负整数则表示删除这个位置的元素,并返回余下的元素。

x
 [1]  3 13 13 13 17 13  1  5 14 11
#删除第一位的元素
x[-1]
[1] 13 13 13 17 13  1  5 14 11

倒数位置选取元素

如果是以倒数位置选取元素。倒数第一位置借助length函数表示下标,倒数第二三等等依次递减。

set.seed(1234)
x <- runif(10,min = 1,max = 20)
x
 [1]  3 13 13 13 17 13  1  5 14 11
# 倒数第一位元素
x[length(x)]
[1] 11
# 倒数第二位元素
x[length(x)-1]
[1] 14

下标赋值

可以根据下标位置来进行赋值

x
 [1]  3 13 13 13 17 13  1  5 14 11
#将第一位置赋值为8
x[1] <- 8
x
 [1]  8 13 13 13 17 13  1  5 14 11

下标超界

下标超界即向量x的长度为n,它的最大下标即是n,如果超过n,则超界。

在R中向量下标超界则返回NA空白值。如果对这个下标位置赋值,则生成对应位置的元素

length(x)
[1] 10
x[11]
NA
x[11] <- 15
x
 [1]  3 13 13 13 17 13  1  5 14 11 15

逻辑下标

可以以逻辑表达式作为下标,返回对应的元素。

set.seed(1234)
x <- runif(10,min = 1,max = 20)
x
 [1]  3 13 13 13 17 13  1  5 14 11
#找出数值大于10的元素
x[x > 10]
[1] 13 13 13 17 13 14 11

which函数、seq函数

which函数找出对应元素的下标

x
 [1]  3 13 13 13 17 13  1  5 14 11
#找出取值大于13的元素的位置下标
which(x>13)
[1] 5 6 9

seq函数也可以返回下标

seq(along=x)[x>13]
[1] 5 6 9
seq_along(x)[x>13]
[1] 5 6 9
seq(along.with=x)[x>13]
[1] 5 6 9

可以在for循环中用seq_along(x)代替1:length(x)

for (i in seq_along(x)) {
     print(x[i])
 }
for (i in 1:length(x)) {
     print(x[i])
 }

which.min与which.max可以分别找出向量中最小值与最大值的下标位置

x
 [1]  3 13 13 13 17 13  1  5 14 11
which.min(x)
[1] 7
which.max(x)
[1] 5

返回NA的下标

a <- c(NA,1,NA,23,45,NA)
which(is.na(a))
[1] 1 3 6

补充:R语言中的向量使用合集

看代码吧~

#---r中向量相关的操作

#----数字型向量
#赋值
x<-c(1,2,3)
assign("x",c(1,2,3))

y<-c(x,2,x)
# > y
# [1] 1 2 3 2 1 2 3

#向量的运算
x<-c(1,2,3);y<-c(2,3,4)
v1<-2*x+x*y+1
# > v1
# [1]  5 11 19

v2<-2*x+x*y+c(1,1,1)
v1==v2
# > v1==v2  两者效果相同,自己体会
# [1] TRUE TRUE TRUE

x^2
# > x^2
# [1] 1 4 9

#函数运算,比如log,sqrt,sin等
x<-c(1,2,3)
sqrt(x)
# > sqrt(x)
# [1] 1.000000 1.414214 1.732051

#与向量相关的其他函数min、max、range、which.min、which.max、sum、prod、length、sort、mean、var
x<-c(3,2,1)
# > min(x)
# [1] 1
# > max(x)
# [1] 3
# > which.max(x)
# [1] 1
# > which.min(x)
# [1] 3
# > sum(x)
# [1] 6
# > prod(x)
# [1] 6
# > length(x)
# [1] 3
# > sort(x)
# [1] 1 2 3
# > mean(x)
# [1] 2
# > var(x)
# [1] 1

#等差数列一般采用a:b的形式
# > 1:15 代表从1到15的数列,每次加1
# [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
# > 1:4.5 a为整数,b为实数,表示a到b的整数部分,每次加1
# [1] 1 2 3 4
# > 1.5:5  a为实数,b为整数,表示从a开始累加到b,每次加1
# [1] 1.5 2.5 3.5 4.5
# > 2*(1:5)
# [1]  2  4  6  8 10
# > 2*1:5  向量优先级大于运算符号
# [1]  2  4  6  8 10
# > 1:5-1
# [1] 0 1 2 3 4

#重复函数 rep(x,times=)
x<-c(1,2,3)
s<-rep(x,times=2)
# > s
# [1] 1 2 3 1 2 3

#逻辑向量,在向量赋值处使用逻辑表达式
x<-c(1,2,3,4,5)
l<-x>3
# > l
# [1] FALSE FALSE FALSE  TRUE  TRUE
#其它的逻辑向量运算还有< <= == !=等

#all和any用于返回向量中的值是否全部大于3的逻辑值,any返回向量x中是否有值大于3
all(x>3)
any(x>3)

#逻辑向量的赋值,可以使用F和T对false和true进行简写
l<-c(TRUE,FALSE,F,T)

#向量中的缺失数据、赋值、检查
z<-c(-1,1:3,NA)
z
# [1] -1  1  2  3 NA
is.na(z)
z[is.na(z)]<-0
# > z
# [1] -1  1  2  3  0

#结合z的下标进行复杂运算
z
# [1] -1  1  2  3  0

#结合z的下标进行复杂运算
 (z+1)[!is.na(z)&z>0]
# [1] 2 3 4 

#-----字符型向量
#涉及赋值、paste连接

X<-c("My","Job")
paste("My","Job")  #表示将两个字符链接,默认使用空格进行分隔开
# [1] "My Job"
paste("X",1:6,sep = "")
# [1] "X1" "X2" "X3" "X4" "X5" "X6"

#可以使用定义下标值的方法来定义分段函数
#比如分段函数 y=1-x  x<0 y=1+x x>=0
y[x<0]<-1-x[x<0]
y[x>=0]<-1+x[x>=0] 

#下标的正整数运算
v<-10:20
v[c(1,2,3,4)]
c("a","b","c")[rep(c(2,1,3),times=3)]

#下标的负整数运算
v[-(1:5)]
#表示去除代号为哪些的值

#取字符向量的某些下标值
#在定义向量的时候可以加上列名
ages<-c(Li=23,chen=30)
#向量名称可以后加

ages=c(23,40,50)
names(ages)<-c("li","chen","zhang")
ages

# > ages
# li  chen zhang
# 23    40    50

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • 基于R语言赋值符号的区别说明

    R语言赋值可以用=或<-,一般都建议使用<-,那你知道这两个之间的区间吗?那你有没有见过'<-'和'='这种赋值方法吗?今天就来和大家聊聊这基本的赋值符号都有哪些区别. 首先我们来看看符号的优先级,和java,c这些编程语言的优先级类似.下面这些都取自R帮助文档,输入?Syntax即可查看,它是根据优先级从高到低排列的. :: ::: access variables in a namespace $ @ component / slot extraction [ [[ indexing

  • R语言通过parallel包实现多线程运行方式

    总的来说,R的运算速度不算快,不过类似并行运算之类的改进可以提高运算的性能.下面非常简要地介绍如何利用R语言进行并行运算 library(parallel) cl.cores <- detectCores() cl <- makeCluster(cl.cores) detectCores( )检查当前电脑可用核数. makeCluster(cl.cores)使用刚才检测的核并行运算.R-Doc里这样描述makeCluster函数:Creates a set of copies of R run

  • R语言中cut()函数的用法说明

    R语言cut()函数使用 cut()切割将x的范围划分为时间间隔,并根据其所处的时间间隔对x中的值进行编码. 参数:breaks:两个或更多个唯一切割点或单个数字(大于或等于2)的数字向量,给出x被切割的间隔的个数. breaks采用fivenum():返回五个数据:最小值.下四分位数.中位数.上四分位数.最大值. labels为区间数,打标签 ordered_result 逻辑结果应该是一个有序的因素吗? 先用fivenum求出5个数,再用labels为每两个数之间,贴标签,采用(]的区间,

  • R语言-有负下标里才能有零介绍

    1.只有负下标里才能有零 先看一个例子 >a<-c(1,2,3,4) >a[-1:1] > a[-1:1] Error in a[-1:1] : 只有负下标里才能有零 (1)只有负下标里才能有零,在这里的意思为: a[-1:0] 可行 a[0:4]也可行 a[-1:1]不可行 也就是说要么是负索引到0,或者0到正索引,但不能同时出现正负索引. (2)a[0]结果为numberic(0),结果没有意义,如 > a[0]+10.9 numeric(0) > a[1]+10.

  • R语言多线程运算操作(解决R循环慢的问题)

    已经大半年没有更新博客了..最近都跑去写分析报告半年没有R 这次记录下关于R循环(百万级以上)死慢死慢的问题,这个问题去年就碰到过,当时也尝试过多线程,but failed......昨天试了下,终于跑通了,而且过程还挺顺利 step1 先查下自己电脑几核的,n核貌似应该选跑n个线程,线程不是越多越好,线程个数和任务运行时间是条开口向下的抛物线,最高点预计在电脑的核数上. detectCores( )检查当前电脑可用核数 我的是4所以step2选的是4 library(parallel) cl.

  • R语言中c()函数与paste()函数的区别说明

    c()函数:将括号中的元素连接起来,并不创建向量 paste()函数:连接括号中的元素 例如 c(1, 2:4),结果为1 2 3 4 paste(1, 2:4),结果为"1 2" "1 3" "1 4" c(2, "and"),结果为"2" "and" paste(2, "and"),结果为"2 and" 补充:R语言中paste函数的参数sep

  • R语言-summary()函数的用法解读

    summary():获取描述性统计量,可以提供最小值.最大值.四分位数和数值型变量的均值,以及因子向量和逻辑型向量的频数统计等. 结果解读如下: 1. 调用:Call lm(formula = DstValue ~ Month + RecentVal1 + RecentVal4 + RecentVal6 + RecentVal8 + RecentVal12, data = trainData) 当创建模型时,以上代码表明lm是如何被调用的. 2. 残差统计量:Residuals Min 1Q M

  • 在R语言中实现Logistic逻辑回归的操作

    逻辑回归是拟合回归曲线的方法,当y是分类变量时,y = f(x).典型的使用这种模式被预测Ÿ给定一组预测的X.预测因子可以是连续的,分类的或两者的混合. R中的逻辑回归实现 R可以很容易地拟合逻辑回归模型.要调用的函数是glm(),拟合过程与线性回归中使用的过程没有太大差别.在这篇文章中,我将拟合一个二元逻辑回归模型并解释每一步. 数据集 我们将研究泰坦尼克号数据集.这个数据集有不同版本可以在线免费获得,但我建议使用Kaggle提供的数据集. 目标是预测生存(如果乘客幸存,则为1,否则为0)基于

  • R语言向量下标操作

    向量下标即元素在向量中的位置,在实践中我们可以利用下标(元素的位置)来找出自己想要的数. 利用runif函数生成包含10个正整数的向量x. options(digits = 1) set.seed(1234) x <- runif(10,min = 1,max = 20) x [1] 3 13 13 13 17 13 1 5 14 11 正整数下标 我们可以输入正整数作为下标来找出对应位置的元素. 在[]内输入下标. #向量x的第一位置的元素 x[1] [1] 3 #向量x的第2位置的元素 x[

  • R语言向量下标和子集的使用

    目录 1.正整数下标 2.负整数下标 3.空下标与零下标 4.下标超界 5.逻辑下标 6. which().which.min().which.max()函数 7. 元素名 8.用R向量下标作映射 9.集合运算 练习 1.正整数下标 首先定义一个x,然后对向量 x, 在后面加方括号和下标可以访问向量的元素和子集,如:  定义一个x: x <- c(1, 4, 6.25) x 返回: 我们取出第二个元素: x[2] 返回: 我们再修改第二个元素为 99 : x[2] <- 99; x 返回: 我

  • R语言向量知识点及实例讲解

    有常见的六种基本的向量类型 创建向量 设定recursive = T,c函数可以从其他数据结构中递归形成向量 > v <- c(.295, .300, .250, .287, list(.102, .200, .303), recursive = T) > v [1] 0.295 0.300 0.250 0.287 0.102 0.200 0.303 > typeof(v) [1] "double" > v <- c(.295, .300, .250

  • R语言对二进制文件操作详解

    二进制文件是包含仅以位和字节(0和1)的形式存储的信息的文件.它们不是人类可读的,因为它中的字节转换为包含许多其他不可打印字符的字符和符号.尝试使用任何文本编辑器读取二进制文件将显示如Ø和ð的字符. 二进制文件必须由特定程序读取才能使用.例如,Microsoft Word程序的二进制文件只能通过Word程序读取到人类可读的形式.这表示,除了人类可读的文本之外,还有更多的信息,例如字符和页码等的格式化,它们也与字母数字字符一起存储.最后一个二进制文件是一个连续的字节序列.我们在文本文件中看到的换行

  • R语言数据预处理操作——离散化(分箱)

    一.项目环境 开发工具:RStudio R:3.5.2 相关包:infotheo,discretization,smbinning,dplyr,sqldf 二.导入数据 # 这里我们使用的是鸢尾花数据集(iris) data(iris) head(iris) Sepal.Length Sepal.Width Petal.Length Petal.Width Species 1 5.1 3.5 1.4 0.2 setosa 2 4.9 3.0 1.4 0.2 setosa 3 4.7 3.2 1.

  • R语言的Dataframe常用操作使用

    上节我们简单介绍了Dataframe的定义,这节我们具体来看一下Dataframe的操作 首先,数据框的创建函数为 data.frame( ),参考R语言的帮助文档,我们来了解一下data.frame( )的具体用法: Usage data.frame(..., row.names = NULL, check.rows = FALSE, check.names = TRUE, fix.empty.names = TRUE, stringsAsFactors = default.stringsAs

  • R语言实现二进制文件读写操作

    二进制文件是一个文件,其中包含仅以位和字节形式存储的信息(0和1),它们是不可读的,因为其中的字节转换为包含许多其他不可打印字符的字符和符号,随便我们尝试使用任何文本编辑器读取二进制文件将显示为类似Ø和ð这样的字符. 但是二进制文件必须由特定程序读取才能使用.例如,Microsoft Word程序的二进制文件只能通过Word程序读取到人类可读的形式.这表明,除了人类可读的文本之外,还有更多的信息,如格式化的字符和页码等,它们也与字母数字字符一起存储.最后,二进制文件是一个连续的字节序列. 我们在

  • R语言最简单的向量赋值方法示例

    1. 生成等差数列的向量x x <- 1:10 #将x向量赋值为1 2 3 4 5 6 7 8 9 10 结果为 > x  [1]  1  2  3  4  5  6  7  8  9 10 2. 将x的值全部修改成0 x[] <- 0 #非常简洁的赋值方法,建议使用 x[1:length(x)] <- 0 #不建议使用的赋值方法 结果为: > x[] <- 0 > x  [1] 0 0 0 0 0 0 0 0 0 0 3.使用seq函数 x <- seq(

随机推荐