R語言向量下標操作
向量下標即元素在向量中的位置,在實踐中我們可以利用下標(元素的位置)來找出自己想要的數(shù)。
利用runif函數(shù)生成包含10個正整數(shù)的向量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
正整數(shù)下標
我們可以輸入正整數(shù)作為下標來找出對應(yīng)位置的元素。
在[]內(nèi)輸入下標。
#向量x的第一位置的元素 x[1] [1] 3 #向量x的第2位置的元素 x[2] [1] 13 x[0] numeric(0)
與其他編程語言不一樣(下標從0開始算起),R的下標是從1開始算起。
在R語言中向量輸入0下標返回numeric(0)。
如果在其他語言,如python中輸入下標0,則返回向量中第一個位置的元素
負整數(shù)下標
如果為負整數(shù)則表示刪除這個位置的元素,并返回余下的元素。
x [1] 3 13 13 13 17 13 1 5 14 11 #刪除第一位的元素 x[-1] [1] 13 13 13 17 13 1 5 14 11
倒數(shù)位置選取元素
如果是以倒數(shù)位置選取元素。倒數(shù)第一位置借助length函數(shù)表示下標,倒數(shù)第二三等等依次遞減。
set.seed(1234) x <- runif(10,min = 1,max = 20) x [1] 3 13 13 13 17 13 1 5 14 11 # 倒數(shù)第一位元素 x[length(x)] [1] 11 # 倒數(shù)第二位元素 x[length(x)-1] [1] 14
下標賦值
可以根據(jù)下標位置來進行賦值
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空白值。如果對這個下標位置賦值,則生成對應(yīng)位置的元素
length(x) [1] 10 x[11] NA x[11] <- 15 x [1] 3 13 13 13 17 13 1 5 14 11 15
邏輯下標
可以以邏輯表達式作為下標,返回對應(yīng)的元素。
set.seed(1234) x <- runif(10,min = 1,max = 20) x [1] 3 13 13 13 17 13 1 5 14 11 #找出數(shù)值大于10的元素 x[x > 10] [1] 13 13 13 17 13 14 11
which函數(shù)、seq函數(shù)
which函數(shù)找出對應(yīng)元素的下標
x [1] 3 13 13 13 17 13 1 5 14 11 #找出取值大于13的元素的位置下標 which(x>13) [1] 5 6 9
seq函數(shù)也可以返回下標
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循環(huán)中用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中向量相關(guān)的操作 #----數(shù)字型向量 #賦值 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 #函數(shù)運算,比如log,sqrt,sin等 x<-c(1,2,3) sqrt(x) # > sqrt(x) # [1] 1.000000 1.414214 1.732051 #與向量相關(guān)的其他函數(shù)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 #等差數(shù)列一般采用a:b的形式 # > 1:15 代表從1到15的數(shù)列,每次加1 # [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 # > 1:4.5 a為整數(shù),b為實數(shù),表示a到b的整數(shù)部分,每次加1 # [1] 1 2 3 4 # > 1.5:5 a為實數(shù),b為整數(shù),表示從a開始累加到b,每次加1 # [1] 1.5 2.5 3.5 4.5 # > 2*(1:5) # [1] 2 4 6 8 10 # > 2*1:5 向量優(yōu)先級大于運算符號 # [1] 2 4 6 8 10 # > 1:5-1 # [1] 0 1 2 3 4 #重復(fù)函數(shù) 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) #向量中的缺失數(shù)據(jù)、賦值、檢查 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 #結(jié)合z的下標進行復(fù)雜運算 z # [1] -1 1 2 3 0 #結(jié)合z的下標進行復(fù)雜運算 (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" #可以使用定義下標值的方法來定義分段函數(shù) #比如分段函數(shù) y=1-x x<0 y=1+x x>=0 y[x<0]<-1-x[x<0] y[x>=0]<-1+x[x>=0] #下標的正整數(shù)運算 v<-10:20 v[c(1,2,3,4)] c("a","b","c")[rep(c(2,1,3),times=3)] #下標的負整數(shù)運算 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
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
R語言 實現(xiàn)兩表連接且輸出不重復(fù)數(shù)據(jù)
這篇文章主要介紹了R語言 實現(xiàn)兩表連接且輸出不重復(fù)數(shù)據(jù)的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03R語言中dnorm,pnorm,qnorm和rnorm的區(qū)別淺析
正在學習R語言統(tǒng)計學的小伙伴,可能會被各種專有名詞所困擾,下面這篇文章主要給大家介紹了關(guān)于R語言中dnorm,pnorm,qnorm和rnorm區(qū)別的相關(guān)資料,需要的朋友可以參考下2022-12-12R語言數(shù)據(jù)可視化繪圖Slope chart坡度圖畫法
這篇文章主要為大家介紹了R語言數(shù)據(jù)可視化繪圖Slope?chart坡度圖的畫法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-02-02使用R中merge()函數(shù)合并數(shù)據(jù)的方法
這篇文章主要介紹了使用R中merge()函數(shù)合并數(shù)據(jù),本文詳細介紹R中merge()函數(shù)參數(shù)及合并數(shù)據(jù)類型,利用sql的表連接概念進行類比,簡單易懂,需要的朋友可以參考下2023-03-03