天天看點

《R語言資料挖掘:實用項目解析》——第1章,第1.4節排序與合并資料框

本節書摘來自華章出版社《r語言資料挖掘:實用項目解析》一書中的第1章,第1.4節排序與合并資料框,作者[印度]普拉迪帕塔·米什拉(pradeepta mishra),更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視

1.4 排序與合并資料框

在做資料管理時,排序與合并是兩個重要概念。它們的操作對象可以是單一向量或者是一個資料框,還可以是一個矩陣。r語言中的sort()用于對向量進行排序。降序指令選項可用以改變排序的方向(升序或降序)。在處理像artpiece.csv這樣的資料框時,用order指令對資料進行排序,可以設定多個變量是升序還是降序。如要執行降序,可以在一個變量名前加一個負号。下面利用一個資料集來闡釋r語言中的排序概念,代碼如下:

《R語言資料挖掘:實用項目解析》——第1章,第1.4節排序與合并資料框

artpiece資料集裡有16個變量:10個數值變量和6個分類變量。使用names指令可輸出資料集中所有變量的名字。借助attach函數,目前r會話中的所有變量名都會儲存下來,使用者就不需要每次在輸入變量名時在前面加上資料名:

《R語言資料挖掘:實用項目解析》——第1章,第1.4節排序與合并資料框

排序預設采用升序排列,如果想對向量進行降序排列,則需要在排序的變量名前加一個負号。如下所示,變量critic.ratings也可以以降序排列。要以降序排列,指令中的decreasing需要設定成true:

《R語言資料挖掘:實用項目解析》——第1章,第1.4節排序與合并資料框

除了對單個數值向量排序,大多數時候資料集需要按一些輸入變量或資料框中的目前屬性進行排序。對單個變量排序和對資料框排序有很大不同。下面的代碼示範了如何使用order函數對資料框排序:

《R語言資料挖掘:實用項目解析》——第1章,第1.4節排序與合并資料框

如上面的代碼所示,變量critic.ratings和acq. cost以升序排列,使用的是order指令而非sort指令。head指令預設輸出有序資料的前6條記錄。order指令中的第二個參數1∶5表明我們想要輸出artpiece資料集前6條記錄的前五個變量。如果需要輸出前10條記錄,可以執行head(i2, 10)。這個資料集沒有缺失值,但需要注意的是,實際資料中是存在缺失值(na)的。而在有缺失值(na)時,資料框的排序會變得比較棘手。假使将資料集中的任意na值納入考慮,order指令會産生以下結果:

《R語言資料挖掘:實用項目解析》——第1章,第1.4節排序與合并資料框

na.last指令用于将缺失值(na值)從資料集中分離開來——它們會被放到資料集的末尾(如果na.last是true),或是資料集的開頭(如果na.fast是false)。在order函數中分離出na值可以保證資料的完整性。

merge函數用于合并兩個資料框。要合并兩個資料框,前提是它們至少有一列是同名的。兩個資料框也可以通過列合并函數合并。為了顯示列合并函數和merge函數的差別,我們以audit.csv資料集作為例子。現有從audit資料集中抽取的兩個小資料集a和b:

《R語言資料挖掘:實用項目解析》——第1章,第1.4節排序與合并資料框

以id和employment這兩列作為資料集a和b的公共列,可以以此作為合并兩個資料框的主鍵。使用merge指令,共有列将在merge函數的輸出資料集中出現一次。合并的資料框包含了兩個資料框的所有行:

《R語言資料挖掘:實用項目解析》——第1章,第1.4節排序與合并資料框

merge函數提供4種合并資料的方法:自然連接配接、全外部連接配接、左外部連接配接和右外部連接配接。除了這些連接配接外,兩個資料框還可以基于任何指定的單列或多列進行合并。自然連接配接隻保留兩個資料框合并時比對上的行,可用參數all=f設定:

《R語言資料挖掘:實用項目解析》——第1章,第1.4節排序與合并資料框

全外部連接配接讓我們可以保留兩個資料框的所有行,這可用all=t指令指定。它執行全合并,并用na值補全兩個資料框中都沒有比對資料的列。merge函數預設會除去兩個資料框中所有不相比對的記錄。若要在新資料框中保留所有記錄,則需要設定all=t:

《R語言資料挖掘:實用項目解析》——第1章,第1.4節排序與合并資料框

左外部連接配接将包含資料框1(a)的所有行和資料框2(b)中連接配接比對上的行。若要完成左外部連接配接,則需要規定all.x=t:

《R語言資料挖掘:實用項目解析》——第1章,第1.4節排序與合并資料框

右外部連接配接将包含資料框b的所有行和資料框a中連接配接比對上的行。若要完成右外部連接配接,則需要規定all.y=t:

《R語言資料挖掘:實用項目解析》——第1章,第1.4節排序與合并資料框
《R語言資料挖掘:實用項目解析》——第1章,第1.4節排序與合并資料框

在資料框a和b中,有兩個公共列,即id和employment。使用merge函數時,如果選擇按單個公共列合并,那麼另一個公共列也會出現在輸出資料框中。如果合并多個資料框,多重的列将不會出現在輸出資料框中:

《R語言資料挖掘:實用項目解析》——第1章,第1.4節排序與合并資料框

在兩個資料框至少有一個共同列時,merge函數是有用的。如果兩個資料框都包含不重疊的列或者兩個資料框沒有共同列,可使用column bind函數合并兩個資料框。column bind函數輸出資料框a和資料框b中的所有列且将其并排排列。

《R語言資料挖掘:實用項目解析》——第1章,第1.4節排序與合并資料框

繼續閱讀