1. 程式人生 > >對R語言因子的淺讀

對R語言因子的淺讀

啊啊啊啊啊好煩啊什麼是因子!!不同領域中的對因子的解釋是不同的!結果一百度,什麼樣的定義都有!好醉!加上R語言這個關鍵詞才找得到定義!可是,還是很難懂啊啊啊!後來經過我無限掙扎(原諒我笨),我才終於貌似懂了那麼一點點,接下來我會用比較簡單的例子去闡述!希望你能聽懂!

故事開始了:

噔噔噔!開學了!一年級的小朋友們入學了啊啊好激動!但是很快,他們人生中第一次正式的考試來了!

第一次考試嘛,難免失手!當然了肯定有厲害的人對吧!先假設班裡只有5個人哈(資料不要太多,沒意思),成績如下:小韜:100、小紅:95,小花:80、小兵:75、小懶:56

好了那現在我給他們的成績做個總結哈


那好,現在用factor()轉化下它~~~


好了總結下:什麼叫因子呢?

百度的定義是這樣的: 因子用來儲存類別變數(categorical variables)和有序變數,這類變數不能用來計算而只能用來分類或者計數。因子表示分類變數,有序因子表示有序變數。

今天就不討論有序變數哈,下次再來~而因子就是類別和有序的變數,相當於把變數分成離散的還有連續的,因子就是離散的那些向量。

我們先仔細觀察下上圖,levels是數字,並按從小到大排序的,所以我們先忽略掉那些同學的名字(小韜對不起了我要忽略你哈哈),單獨看分數就好。

再看看對於factor的定義:生成因子資料物件的函式是factor(),語法是factor(data, levels, labels, ...),其中data是資料,levels是因子水平向量,labels是因子的標籤向量。


那好,分數就是data啦,那問題來了levels是什麼?labels又是什麼?

為了讓大家更好地瞭解,在這個例子中,我們就把levels想象為各種0-100之間可能的分數好了,如果它是預設的話,那就是還是那5人的分數~

labels是標籤向量是一種解釋說明的作用!然後最後輸出的是你進行說明的字串,但這不是替換哦!!!levels的內容還是在的,還是不變的!只是沒有直接輸出而已!

我們來打打程式碼吧(有個大壞蛋叫labels,它把大家的成績都改了!!)

把levels設定為預設值就好,也就是他們對應的分數從小到大排列~


等下!為什麼變化如此之大!為什麼小韜本來是第一的,現在成了最後一名!才十分!

我們來仔細分析下,上面說了levels按從小到大排列的!就是56,75,80,95,100,現在把它解釋為50,40,30,20,10。

那我們對號入座!小懶之前56,就變成了50,小韜之前100,就變成了10分啊!

如果我設定levels呢~大家來看看


就是他們的成績和我們所設定的水平值一樣的話,才會顯示出來,如果不一樣,就是缺失值NA了~

相信大家到這裡已經對facotr的用法有了一個初步的理解!

那我們現在就來來檢驗一個物件是否是因子,用函式is.factor(),很容易記得的!英語中“Is factor?”哈哈哈哈

FALSE證明了變數score不是因子,那我把它轉換成因子!用as.factor,“作為因子嘛”,也很容易記住對吧?!


邏輯值為TRUE,證明轉換成功了噢耶~

那我們來看看因子有什麼應用呢?!

當然有了啊可以分類啊

那我再舉個例子,小韜是男生,小紅是女生,小花是女生,小兵是男生,小懶是男生。

現在我要計算男女生分別的人數


現在我要計算女生的平均分,男生的平均分


但是倒數第二個例子寶寶發現可以不用把向量轉化為因子就可以輸出了,好憂傷!居然不需要用因子也可以輸出!明明說需要因子的!寶寶心累!

望高人指點55555555555555555555555555

不過還是小小的總結下,其實因子只是R語言中的一個獨特的資料型別而已,它是可以幫助我們分組的。嗯雖然我還是沒能全部弄懂它,不過希望接下來的學習,可以讓我一點點地理解它然後真正瞭解它的用武之地吧!!!