第14 天:資料處理技巧· 輕鬆學習R 語言
文章推薦指數: 80 %
新增與刪除一個變數. 新增一個變數. 直接將新的向量指派給既有的資料框: > team_name wins iris[1,5]
[1]setosa
Levels:setosaversicolorvirginica
>iris[1,"Species"]
[1]setosa
Levels:setosaversicolorvirginica
解構為向量
取出內建資料集iris的某一個變數:
>iris$Sepal.Length#亦可以寫作iris[,"Sepal.Length"]
[1]5.14.94.74.65.05.44.65.04.44.95.44.84.84.35.85.75.45.15.7
[20]5.15.45.14.65.14.85.05.05.25.24.74.85.45.25.54.95.05.54.9
[39]4.45.15.04.54.45.05.14.85.14.65.35.07.06.46.95.56.55.76.3
[58]4.96.65.25.05.96.06.15.66.75.65.86.25.65.96.16.36.16.46.6
[77]6.86.76.05.75.55.55.86.05.46.06.76.35.65.55.56.15.85.05.6
[96]5.75.76.25.15.76.35.87.16.36.57.64.97.36.77.26.56.46.85.7
[115]5.86.46.57.77.76.06.95.67.76.36.77.26.26.16.47.27.47.96.4
[134]6.36.17.76.36.46.06.96.76.95.86.86.76.76.36.56.25.9
我們可以清楚地發現,取出單一個變數後的資料結構就是向量,我們回憶一下使用data.frame()函數建立資料框的過程,是否也同樣是輸入數個向量然後結合成為一個資料框呢?
>#輸入5個向量結合成為一個有5個變數的資料框
>team_namewinslossesis_championseason
>great_nba_teamsiris[1:6,c("Sepal.Length","Petal.Length","Species")]
Sepal.LengthPetal.LengthSpecies
15.11.4setosa
24.91.4setosa
34.71.3setosa
44.61.5setosa
55.01.4setosa
65.41.7setosa
或者利用邏輯值判斷選擇部分的資料框,這也是實務上較常使用的方式:
>iris[iris$Petal.Length>=6,c("Sepal.Length","Petal.Length","Species")]
Sepal.LengthPetal.LengthSpecies
1016.36.0virginica
1067.66.6virginica
1087.36.3virginica
1107.26.1virginica
1187.76.7virginica
1197.76.9virginica
1237.76.7virginica
1267.26.0virginica
1317.46.1virginica
1327.96.4virginica
1367.76.1virginica
假如我們希望使用更多的邏輯值判斷,可以使用&(and)或者|(or)這樣的運算子連結判斷條件:
>filter=6)&(iris$Sepal.Length>=7.5)
>iris[filter,c("Sepal.Length","Petal.Length","Species")]
Sepal.LengthPetal.LengthSpecies
1067.66.6virginica
1187.76.7virginica
1197.76.9virginica
1237.76.7virginica
1327.96.4virginica
1367.76.1virginica
在這裡很多的R語言使用者,特別是有其他程式語言編寫經驗的就會問一個問題:&與&&或者說|與||的差別是什麼呢?
在R語言中連結兩個單變數的判斷條件,我們使用&&與||:
>8>7&&8<7
[1]FALSE
>8>7||8<7
[1]TRUE
假如是連結多個變數(例如向量)判斷條件,我們使用&與|:
>c(8,8)>c(7,7)&c(8,8)
調整變數的位置
調整變數位置為:season、is_champion、wins、losses與team_name。
>team_namewinslossesis_championseason
>#既有資料框
>great_nba_teams#調整變數的位置
>great_nba_teamsgreat_nba_teams
seasonis_championwinslossesteam_name
11995-96TRUE7210ChicagoBulls
22015-16FALSE739GoldenStateWarriors
對類別變數重新編碼
將great_nba_teams$is_champion的邏輯值重新編碼為"Y"與"N":
>team_namewinslossesis_championseason
>#既有資料框
>great_nba_teams
>#重新編碼
>great_nba_teams$is_champion[great_nba_teams$is_champion==TRUE]great_nba_teams$is_champion[great_nba_teams$is_champion==FALSE]great_nba_teams
team_namewinslossesis_championseason
1ChicagoBulls7210Y1995-96
2GoldenStateWarriors739N2015-16
對數值變數重新編碼為類別變數
利用cut()函數將straw_hat_df$age的數值重新編碼為"20歲以下"、"超過20歲但30歲以下"與"超過30歲",cut()函數的參數設定稍微複雜一點,使用者必須要針對不同的類別指定切點breaks,舉例來說,要將年齡區分為三種類型,那麼我們必須要給定四個年齡切點(就像是植樹或者路燈問題!):c(0,20,30,Inf),其中Inf是R語言內建的無限大數值;以及給予三個類型標籤labels:c("20歲以下","超過20歲但30歲以下","超過30歲")
>#既有的資料框
>nameagestraw_hat_df
>#將straw_hat_df$age重新編碼
>straw_hat_df$age_categorystraw_hat_df
nameageage_category
1蒙其·D·魯夫1920歲以下
2羅羅亞·索隆21超過20歲但30歲以下
3娜美2020歲以下
4騙人布1920歲以下
5賓什莫克·香吉士21超過20歲但30歲以下
6多尼多尼·喬巴1720歲以下
7妮可·羅賓30超過20歲但30歲以下
8佛朗基36超過30歲
9布魯克90超過30歲
合併資料框
垂直合併
垂直合併使用rbind()函數,rbind是rowbind的縮寫:
>cars_uppercars_bottom
>cars_combinedcars_leftcars_right
>cars_combined#左邊的資料框
>nameageleft_df
>#右邊的資料框
>namedevil_fruitright_df
>#合併後的資料框
>merged_dfmerged_df
nameagedevil_fruit
1多尼多尼·喬巴17人人果實
2蒙其·D·魯夫19橡膠果實
觀察合併後的資料框,我們可以發現只有左邊與右邊都有的兩個觀測值保留在最後的輸出,這是因為merge()函數預設是保留左右資料框的交集。
假如我們希望保留所有左邊資料框的觀測值,我們可以指定參數all.x=TRUE,那麼右邊資料框對應不到部分,就會以遺漏值NA呈現:
>#左邊的資料框
>nameageleft_df
>#右邊的資料框
>namedevil_fruitright_df
>#合併後的資料框
>merged_dfmerged_df
nameagedevil_fruit
1多尼多尼·喬巴17人人果實
2娜美20
favorite_bands_df
延伸文章資訊
- 16 資料處理與清洗| 資料科學與R語言
轉換為數字 as.numeric(變數名稱); 轉換為文字 as.character(變數名稱); 轉換為布林變數 ... 有時需要在資料框新增一列,或新增一行,可以利用資料組合函數完成.
- 27 探索式資料分析| 資料科學與R語言 - Yi-Ju Tseng
探索式資料分析包括分析各變數間的關聯性,看是否有預料之外的有趣發現,或是觀察資料內容 ... 使用 mutate() 增加新欄位,如需新增新欄位 FieldGoalsRate ,欄位值為 ...
- 3輕鬆學習R 語言:基礎資料框處理 - Medium
成功將資料輸入R 語言之後,初學者會花很多時間在處理資料上面,所以我們特別將 ... 直接將欲新增的變數以向量宣告後指派給既有的資料框就能夠完成。
- 4R筆記--(2)基本資料型態 - RPubs
若要在R裡宣告一個數字,可以這麼做:. a <- 3 b <- 1.6. 在這裡,我們稱 a 和 b 為「變數」(或是物件)。 而 <- 符號,會把右邊的東西,儲存到左邊的 ...
- 5Chapter 8 資料基本處理| R 資料科學與統計 - Bookdown
另外一個研究目的是在骨水泥內加入預防性抗生素藥劑, 研究共收集了78 位病患的資料, 變數名稱列在表1. 資料檔案為 DMTKRcsv.csv , DMTKAInfMo.csv , DMTKRt...