<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
首先定義一個x,然後對向量 x, 在後面加方括號和下標可以存取向量的元素和子集,如:
定義一個x:
x <- c(1, 4, 6.25) x
返回:
我們取出第二個元素:
x[2]
返回:
我們再修改第二個元素為 99 :
x[2] <- 99; x
返回:
我們再取下第 1、3 號元素 :
x[c(1,3)]
返回:
我們再修改第 1、3 號元素為 11,13 :
x[c(1,3)] <- c(11, 13); x
返回:
若是下標可重複,又會如何,如:
x[c(1,3,1)]
返回:
負下標表示扣除相應的元素後的子集,如
x <- c(1,4,6.25) x[-2]
-2 表示倒數第二個;返回:
再比如:
x[-c(1,3)]
返回:
負整數下標不能與正整數下標同時用來從某一向量中取子集,比如
x[c(1,-2)]
返回結果會報錯:
x[] 表示取 x 的全部元素作為子集。這與 x 本身不同,比如
x <- c(1,4,6.25) x[]
返回:
然後,我們對x 內的值進行修改
x[] <- 999 x
返回:
再如,另一種對x內的值進行修改
x <- c(1,4,6.25) x <- 999 x
返回結果只有一個值:
可能有人會問是否有 x[0] ,那就讓我們看看
x[0]
返回:
那說明,x[0] 是一種少見的做法,結果返回型別相同、長度為零的向量,如 numeric(0)。
相當於空集;且當 0 與正整數下標一起使用時會被 忽略。當 0 與負整數下標一起使用時也會被 忽略。
設向量 x 長度為 n , 則使用正整數下標時下標應在 { 1 , 2 , . . . , n } 中取值。
x <- c(1,4,6.25) x[2]
返回:
如果使用大於 n 的下標,讀取時返回缺失值,並不出錯。
x[5]
返回:
給超出 n 的下標元素賦值,則向量自動變長,中間沒有賦值的元素為缺失值。例如
x[5] <- 9 x
返回:
雖然 R 的語法對下標超界不視作錯誤,但是這樣的做法往往來自不良的程式思路,而且對程式效率有影響,所以實際程式設計中應避免下標超界。
下標可以是與向量等長的邏輯表示式,一般是關於本向量或者與本向量等長的其它向量的比較結果,如 定義x
x <- c(1,4,6.25)
取出 x 的大於 3 的元素組成的子集
x[x > 3]
返回:
邏輯下標除了用來對向量取子集,還經常用來對資料框取取子集,也用在向量化的運算中。例如,對如下示性函數
輸入向量 x ,結果 y 需要也是一個向量,程式可以寫成
f <- function(x){ y <- numeric(length(x)) y[x >= 0] <- 1 y[x < 0] <- 0 # 此語句多餘 y }
事實上還有一種寫法,向量化的邏輯選擇有一個 ifelse() 函數,比如,對上面的示性函數,如果 x 是一個向量,輸出 y 向量可以寫成
y <- ifelse(x>=0, 1, 0)
要注意的是,如果邏輯下標中有缺失值,對應結果也是缺失值,如
x <- c(1, 4, 6.25, NA) x[x > 2]
返回:
所以,在用邏輯下標作子集選擇時,一定要考慮到缺失值問題。 正確的做法是加上!is.na 前提,如
x[!is.na(x) & x > 2]
返回:
函數 which() 可以用來找到滿足條件的下標,如
x <- c(3, 4, 3, 5, 7, 5, 9) which(x > 5)
返回:
seq(along=x) 會生成由 x 的下標組成的向量,如
seq(along=x)[x > 5]
返回:
用 which.min() 、which.max() 求最小值的下標和最大值的下標,不唯一時只取第一個。如
which.min(x) which.max(x)
返回:
向量可以為每個元素命名。如
ages <- c(" 李明"=30, " 張聰"=25, " 劉穎"=28)
或
ages <- c(30, 25, 28) names(ages) <- c(" 李明", " 張聰", " 劉穎")
或
ages <- setNames(c(30, 25, 28), c(" 李明", " 張聰", " 劉穎"))
這時可以用元素名或元素名向量作為向量的下標,如
ages[" 張聰"]
返回:
再如:
ages[c(" 李明", " 劉穎")]
返回:
再如,修改字串數值:
ages[" 張聰"] <- 26
用字串作為下標時,如果該字串不在向量的元素名中,讀取時返回缺失值結果,賦值時該向量會增加一個元素並以該字串為元素名。 帶有元素名的向量也可以是字元型或其它基本型別,如
sex <- c(" 李明"=" 男", " 張聰"=" 男", " 劉穎"=" 女")
除了給向量元素命名外,在矩陣和資料框中還可以給行、列命名,這會使得程式的擴充套件更為容易和安全。 R 允許僅給部分元素命名,這時其它元素名字為空字串。不同元素的元素名一般應該是不同的,否則在使用元素作為下標時會發生誤讀,但是 R 語法允許存在重名。 用 unname(x) 返回去掉了元素名的 x 的副本,用 names(x) <- NULL 可以去掉 x 的元素名。
R 在使用整數作為向量下標時,允許使用重複下標,這樣可以把陣列 x 看成一個 1 : n 的整數到 x[1] , x[2] , . . . , x[n] 的一個對映表 , 其中 n 是 x 的長度。 比如,某商店有三種禮品,編號為 1,2,3 ,價格分別為 68, 88 和 168 。令
price.map <- c(68, 88, 168)
設某個收銀員在一天內分別售出禮品編號為 3,2,1,1,2,2,3 ,可以用如下的對映方式獲得售出的這些禮品對應的價格:
items <- c(3,2,1,1,2,2,3) y <- price.map[items] print(y)
返回:
R 向量可以用字元型向量作下標,字元型下標也允許重複,所以可以把帶有元素名的 R 向量看成是元素名到元素值的對映表。 比如,設 sex 為 10 個學生的性別(男、女)
sex <- c(" 男", " 男", " 女", " 女", " 男", " 女", " 女", " 女", " 女", " 男")
希望把每個學生按照性別分別對應到藍色和紅色。首先建立一個 R 向量當作對映
sex.color <- c(' 男'='blue', ' 女'='red')
用 R 向量 sex.color 當作對映,可以獲得每個學生對應的顏色
cols <- sex.color[sex]; print(cols)
返回:
這樣的對映結果中帶有不必要的元素名,用 unname() 函數可以去掉元素名,如
unname(cols)
返回:
可以把向量 x 看成一個集合,但是其中的元素允許有重複。用 unique(x) 可以獲得 x 的所有不同值。如
unique(c(1, 5, 2, 5))
返回:
用 a %in% x 判斷 a 的每個元素是否屬於向量 x,如
5 %in% c(1,5,2)
返回:
c(5,6) %in% c(1,5,2)
返回
與 %in 運運算元類似,函數 match(x, table) 對向量 x 的每個元素,從向量 table 中查詢其首次出現位置並返回這些位置。沒有匹配到的元素位置返回NA_integer_( 整數型缺失值) 。如
一個數值判斷:
match(5, c(1,5,2))
返回:
若所匹配集合有重複元素,則返回為第一個元素的下標:
match(5, c(1,5,2,5))
返回:
若匹配兩個元素的所屬呢?
match(c(2,5), c(1,5,2,5))
返回:
若所匹配元素中,有集合中沒有的呢?則返回空值,如
match(c(2,5,0), c(1,5,2,5))
返回:
用 intersect(x,y) 求交集,結果中不含重複元素,如
intersect(c(5, 7), c(1, 5, 2, 5))
返回:
用 union(x,y) 求並集,結果中不含重複元素,如
union(c(5, 7), c(1, 5, 2, 5))
返回:
用 setdiff(x,y) 求差集,即 x 的元素中不屬於 y 的元素組成的集合,結果中不含重複元素,如
setdiff(c(5, 7), c(1, 5, 2, 5))
返回:
用 setequal(x,y) 判斷兩個集合是否相等,不受次序與重複元素的影響,如
setequal(c(1,5,2), c(2,5,1))
再如
setequal(c(1,5,2), c(2,5,1,5))
返回:
設檔案 class.csv 內容如下 :
name,sex,age,height,weight
Alice,F,13,56.5,84
Becka,F,13,65.3,98
Gail,F,14,64.3,90
Karen,F,12,56.3,77
Kathy,F,12,59.8,84.5
Mary,F,15,66.5,112
Sandy,F,11,51.3,50.5
Sharon,F,15,62.5,112.5
Tammy,F,14,62.8,102.5
Alfred,M,14,69,112.5
Duke,M,14,63.5,102.5
Guido,M,15,67,133
James,M,12,57.3,83
Jeffrey,M,13,62.5,84
John,M,12,59,99.5
Philip,M,16,72,150
Robert,M,12,64.8,128
Thomas,M,11,57.5,85
William,M,15,66.5,112
用如下程式可以把上述檔案讀入為 R 資料框 d.class, 並取出其中的 name 和
age 列到變數 name 和 age 中:
d.class <- read.csv ( 'class.csv' , header= TRUE , stringsAsFactors= FALSE )
name <- d.class[, 'name' ]
age <- d.class[, 'age' ]
(1) 求出 age 中第 3, 5, 7 號的值;
(2) 用變數 age, 求出達到 15 歲及以上的那些值;
(3) 用變數 name 和 age, 求出 Mary 與 James 的年齡。
(4) 求 age 中除 Mary 與 James 這兩人之外的那些人的年齡值,儲存到變數 age1 中。
(5) 假設向量 x 長度為 n , 其元素是 { 1 , 2 , . . . , n } 的一個重排。可以把 x 看成一個 i 到 x[i] 的對映 (i 在 { 1 , 2 , . . . , n } 中取值 ) 。求向量 y, 儲存了上述對映的逆對映,即:如果 x[i]=j, 則 y[j]=i 。
到此這篇關於R語言向量下標和子集的使用的文章就介紹到這了,更多相關R語言向量下標和子集內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45