這次要解決的問題是如何使用提取資料框中所有包含缺失值的列。我們知道當我們在處理缺失值時,我們經常會使用平均數、中位數、回歸、甚至機器學習等方式來填補資料框中的缺失值。但是在實際的分析過程中,在進行缺失值處理之前,我們往往會花大量的時間來**缺失值之間的相關性。那麼在進行分析之前,首要任務自然就是先將所有包含缺失值的列提取出來。下面我們將會用幾種方法來進行這一操作,並說明管道操作的優勢。
# 首先我們先導入相關包和資料集
# 匯入magrittr包
library
(magrittr)
# 匯入vim包中的包含缺失值的資料集「sleep」
data
(sleep,package =
"vim"
)# 檢視資料集的前幾行資料
head
(sleep)
bodywgt
brainwgt
nond
dream
sleep
span
gest
pred
expdanger
6654.000
5712.0
nana
3.338.6
645353
1.000
6.66.3
2.08.3
4.54231
33.385
44.5
nana
12.5
14.0601
110.920
5.7na
na16.5
na2552
32547.000
4603.0
2.11.8
3.969.0
624354
10.550
179.5
9.10.7
9.827.0
180444
library
(dplyr)
# 將原始資料賦值到乙個臨時變數中
data <
- sleep
# 在r語言中,false轉換成數值會變成0,true轉換成數值會變成1
# 之所以用abs絕對值函式,是為了在將其轉換成數值的前提下不破壞資料框的結構
data <
-(as.data.
frame
(abs
(is.
na(data)))
,2,sum)
# 使用dplyr包的select函式選取所有包含缺失值的列
data <
-select
(sleep,
one_of
(names
(data[data >0]
)))
library
(dplyr)
# 整體操作沒什麼變化,只是以函式的形式包裹起來,便於多次使用
na_col_plot <
-function
(data)
data <
-na_col_plot
(sleep)
[注]: 函式形式與通常形式,從整體上來說沒有什麼他也特別大的變化。但當該操作需要重複用到時,函式形式可以大大的減少**量。
library
(dplyr)
# %>% 管道函式可以將符號左邊的資料結果,放入右邊函式中,作為輸入的引數
data <
- sleep %>%
is.na() %>
%abs()
%>%
as.data.frame() %>%(
2,sum)
data <
-select
(sleep,
one_of
(names
(data[data >0]
)))
[注]: 相比於其他形式,管道操作可以更好的看到整個處理過程的沒一步驟本文簡單的以提取包含缺失值的列作為例子,來突出管道操作相較於其他形式的乙個好處。在編寫較短的一段線性操作時,管道操作相對於一般的操作和函式操作而言,可以更直觀的展示整個線性操作的處理過程。當時管道操作並不是萬能的,當遇到單次較長的乙個資料操作時,就需要定義有意義的中間變數來方便除錯和理解其意圖。同時當遇到需要重複多次使用、非線性操作或是多個輸入項等情況,都盡量不要使用管道操作。
R 語言中對檔案的操作
由於最近在處理一些真實資料時涉及到巢狀的.tar.gz檔案的解壓,手動乙個乙個解壓過於麻煩。可以使用 shell 指令碼或者 bat 指令碼來做,但想嘗試使用 r 語言對其進行完全解壓,這裡就需要涉及到對檔案與資料夾的一些操作。網上已經有許多現有教程,這裡參考了很多網上的 不過會嘗試盡量寫得更加詳細...
R語言中矩陣的常規操作
1 生成矩陣,使用matrix函式 set.seed 111 設定隨機數種子 vect sample 1 10,16,replace t vect 1 439 53810 11048 10981 7 dat matrix vect,nrow 4,ncol 4,byrow t,生成4行4列矩陣,矩陣行...
R語言中的引號
aa this is an example.1 this is an example.bb this is an example.1 this is an example.identical aa,bb 1 true anne s home 1 anne s home anne s home 1 a...