iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 9
1
自我挑戰組

新手 R 語言學習紀錄系列 第 9

Day 9- R語言 向量子集 (Subsetting vectors)

  • 分享至 

  • twitterImage
  •  

(前言:由於本人沒有接觸過程式語言及程式設計,寫的內容可能不是很正確,還請大家多多指教 :D)

向量子集功能在R語言中是用來修改或檢索一個向量中的符合特定條件、項目或種類資料,要使用這個功能時,先將一個向量賦值到一個物件上,然後用方括號 [] 指定特定條件即可。

這邊我們直接用例題來學向量的子集好了 :)
例:ooof <- sample(c(rnorm(20),rep(NA, 20)), 20) 從一個由20個常態分配亂數與20個NA值中取20個值結果,並把整個函式賦值到一個變數ooof上。ooof的值如下圖:
https://ithelp.ithome.com.tw/upload/images/20190925/20120887QMwYfP5D8F.png

向量子集指令功能及寫法如下列:
ooof[1:10] 顯示 x的前十個值

如果要檢驗x裡面的直是否為NA時,其實是不可以寫成ooof[is.na(ooof)]的,因為根據官方文件說明(而且我沒有理解錯誤的話),is.na函數是檢驗整個向量,不能檢驗向量中的某一些值的,因此如果這樣寫的話,R會給出全部都是NA的結果喔。

這時如果在is.na前面加一個驚嘆號 !,可以檢驗這個向量中含有的非NA值,因為驚嘆號代表 “not”,所以放到is.na裡面代表的是 “is not NA”。這樣寫的話,程式就會吐出以下結果:
https://ithelp.ithome.com.tw/upload/images/20190925/20120887HjSA8E8U0a.png
要將這組數字放進檢驗條件時(這裡給的條件是ooof > 0),用 & 符號將兩個條件連結,例:ooof[!is.na(ooof) & ooof > 0],結果請看下圖:
https://ithelp.ithome.com.tw/upload/images/20190925/20120887Holwuu0bA7.png
ooof[ooof >/< 數字] 檢視ooof內大於/小於特定數值的值

ooof[c(x, y, z,)] 檢視x,y,z 對應向量中之數值,例如:填上2,3,4即表示檢視ooof向量中的第2,3,4個值
https://ithelp.ithome.com.tw/upload/images/20190925/201208870am1kkdyNo.png
但是這時候如果我們要檢視第0個值或者是第2598個值時,R就會吐出 numeric(0) 或者是 NA的結果。(R真的好好喔,不會阻止我問笨問題 :3 )
反之,今天如果只不想檢視第2,3,4個值的時候,我們就在2,3,4前面加個負號,這樣就會直接排除第2,3,4個值,若要再更簡化,就把函數寫成ooof[-c(2,3,4)]就好了
https://ithelp.ithome.com.tw/upload/images/20190925/20120887gKODReYdaM.png

最後是命名的向量,在R語言裡,我們可以把每一個值賦予一個名字,命名方法可以看下面範例
https://ithelp.ithome.com.tw/upload/images/20190925/20120887F9HCzT5ef0.png
如果要查看向量的名字,那麼就把上面的向量賦值到一個變數上,然後用names函數檢視名字,例:先把上面那組向量賦值到kirbland上,然後就可以用names(kirbland)來看名字了。
https://ithelp.ithome.com.tw/upload/images/20190925/201208876NvjytUa7H.png

反之,如果要查看一個名字對應的值,使用vect函數加方括號,在括號中使用雙引號指定名字,即可檢視對應值。
https://ithelp.ithome.com.tw/upload/images/20190925/20120887jCW9kY98La.png

今天的向量子集就學到這邊,明天繼續學矩陣及Data frame :)

(2019-10-3 勘誤:第三段之rnorm「隨機數」應為 「常態分配亂數」)


上一篇
Day 8- R語言 缺失數據(遺漏值)
下一篇
Day 10- R語言 矩陣(matrices)、data frame
系列文
新手 R 語言學習紀錄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言