iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 21
0
AI & Data

機器學習_資料採礦_透過數據協助決策_R語言系列 第 21

[Day 21] R語言_令人煩躁的character(0) & logical(0) & integer(0),用identical處理

  • 分享至 

  • xImage
  •  

只要是想介紹遇到character(0) & logical(0) & integer(0) 要怎辦,我偶爾也是會忘記這兩個的處理方法(摁對,上班遇到突然想不到,對於我這種上班完美主義者很尷尬),然後既然要介紹這兩個東西,就順便介紹一些R語言的資料處理。

假設資料A和B
A = c(1,2,3,4,5,NA)
B = c(1,2,3,4,7,10)
A當中是有NA值的,但是如果這時候用which尋找A值,which(A == NA),有哪些是NA是找不到的,我們可以用 A[is.na(A)] = "NA",先讓NA值變成文字"NA",之後用which(A == "NA")就可以找到,NA值在A的第六個數字的地方。

A[which(A == "NA")]
B[which(B == "NA")]找NA值的位置是什麼數字

A[-which(A == "NA")]
B[-which(B == "NA")]扣NA值後有那些被保留下來,因為B沒有NA值可以扣,因此顯示奇怪的東西
打identical(B[-which(B == "NA")],character(0))則會顯示 TRUE

寫個if
if(identical(B[-which(B == "NA")],character(0))==F)
B =B[-which(B == "NA")]
中文的話就是,如果沒有NA值的話就不進行刪減NA值的動作,因為若沒有NA值還要硬執行刪除,那所有資料都會不見,原理是因為在數字行列當中無法刪除非數字的character(0)
有了這個if,B就不會跑迴圈了。

identical(,character(0))

如果是integer(0)可使用length()去判斷是否"長度"為 0

如果是logical(0)可使用is.logical()

A = c(1,2,3,4,5,NA)
B = c(1,2,3,4,7,10)
which(A == "NA")
#顯示integer(0)
A[is.na(A)] = "NA" #將NA變成文字
B[is.na(B)] = "NA"
which(A == "NA") #顯示6
which(B == "NA") #還是顯示integer(0)

A[-which(A == "NA")]

if(identical(B[-which(B == "NA")],character(0))==F)
  B[which(B == "NA")]
  
  which(B == "NA") #這個會顯示 integer(0)
  length(which(B == "NA"))#這樣就變成0了
  which(B == "NA") == T #這個會顯示 logical(0)
  is.logical(which(B == "NA") == T )#這樣就變成0了

https://ithelp.ithome.com.tw/upload/images/20181102/20111603aMj8c2LDir.png

我其實自己要打程式碼的時候偶爾也會回來這裡直接copy,所以在這裡放幾個我平常覺得很煩躁常常忘記又沒有說很好找的東西。程式碼常常不是only for 某個特定事件的,要把很多可能性都填掉,if遇到資料有時有NA有時沒有的時候要做大量處理就會遇到這個情況。

順便補兩個裝逼用快捷鍵,Ctrl + Alt + B 可以直接執行游標上所有程式碼, Ctrl + l 可以清除左下角的控制臺,這篇這篇就算是打給我自己看的吧,明天禮拜六再回頭去寫時序。


上一篇
[Day 20] 政府開放資料_每日各站點進出站人數_R語言_時間序列分析-2
下一篇
[Day 22] R語言_驗證時序準確性
系列文
機器學習_資料採礦_透過數據協助決策_R語言30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言