只要是想介紹遇到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就不會跑迴圈了。
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了
我其實自己要打程式碼的時候偶爾也會回來這裡直接copy,所以在這裡放幾個我平常覺得很煩躁常常忘記又沒有說很好找的東西。程式碼常常不是only for 某個特定事件的,要把很多可能性都填掉,if遇到資料有時有NA有時沒有的時候要做大量處理就會遇到這個情況。
順便補兩個裝逼用快捷鍵,Ctrl + Alt + B 可以直接執行游標上所有程式碼, Ctrl + l 可以清除左下角的控制臺,這篇這篇就算是打給我自己看的吧,明天禮拜六再回頭去寫時序。