R語言的缺失值處理 1

2021-08-22 08:21:24 字數 3177 閱讀 7459

一定要先了解缺失機制,即為什麼會產生缺失值。

對於隨機產生的缺失值,可以刪除,刪除的物件分為兩類,變數的刪除,以及觀測值的刪除。當某一變數的缺失值比例很高的時候,可以直接刪除,也可以用啞變數進行標誌。

但缺失值的產生不是隨機的,要根據它產生原因用不同的方法填補;

主要介紹三個包的常用於填補缺失值的函式。

思路一般是要定位缺失值以及檢視缺失值的數量:

is.na()

sum(is.na())

md.pattern() mice包

computemissings包

填充:na.fill()

填充,是乙個比較有意思的操作,你的原始資料有可能會有缺失值na,在做各種計算時,就會出現有問題。一種方法是,你把na值都去掉;另外一種方法是,你把na值進行填充後再計算。那麼在填充值時,就有一些講究了。

把na值進行填充。

# 生成資料框

> df<-data.frame(a=c(1,na,na,2,na),

+ b=c('b','a','b','b',na),

+ c=c(rnorm(2),na,na,na));df

a b c

1 1 b 0.2670988

2 na a -0.5425200

3 na b na

4 2 b na

5 na na

# 把資料框a列的na,用9進行填充

> na.fill(df$a,9)

[1] 1 9 9 2 9

# 把資料框中的na,用1進行填充

> na.fill(df,1)

a b c

[1,] " 1" "b" " 0.2670988"

[2,] "true" "a" "-0.5425200"

[3,] "true" "b" "true"

[4,] " 2" "b" "true"

[5,] "true" "true" "true"

填充時,有時並不是用某個固定的值,而是需要基於某種規則去填充。

# 生成乙個zoo型別的資料

> z <- zoo(c(2, na, 1, 4, 5, 2), c(1, 3, 4, 6, 7, 8));z

1 3 4 6 7 8

2 na 1 4 5 2

# 對na進行線性插值

1 3 4 6 7 8

2.000000 1.333333 1.000000 4.000000 5.000000 2.000000

# 對na進行線性插值

1 3 4 6 7 8

2.0 1.5 1.0 4.0 5.0 2.0

# 對na進行樣條插值

> na.spline(z)

1 3 4 6 7 8

2.0000000 0.1535948 1.0000000 4.0000000 5.0000000 2.0000000

另外,我們可以針對na的位置進行填充,比如用前值來填充或後值來填充。

> df

a b c

1 1 b 0.2670988

2 na a -0.5425200

3 na b na

4 2 b na

5 na na

# 用當前列中,na的前值來填充

> na.locf(df)

a b c

1 1 b 0.2670988

2 1 a -0.5425200

3 1 b -0.5425200

4 2 b -0.5425200

5 2 b -0.5425200

# 用當前列中,na的後值來填充

> na.locf(df,fromlast=true)

a b c

1 1 b 0.2670988

2 2 a -0.5425200

3 2 b 4 2 b

以下函式引數較為簡單,help檢視就可以了。

compute函式 計算資料集缺少值,並確定用那種方法進行填補,method有median/mode以及random forest三個方法;

而對於random forest是不支援字元型別值得。所以只能用於數值或者因子型別。而median/mode,當變數取值為字元、因子型時一般為mode,數值型時為median。資料資料的格式一定要是data.frame

impute函式,則是將compute的訓練結果運用於需要進行填補的資料集上,該資料集為data.frame,且變數名要求和compute中data的一樣。

例子:train <- data.frame(v_int=as.integer(c(3,3,2,5,1,2,4,6)) 

v_num=as.numeric(c(4.1,na,12.2,11,3.4,1.6,3.3,5.5)),

v_fact=as.factor(c('one','two',na,'two','two','one','two','two')), stringsasfactors = false))

values <- compute(train, method="randomforest")

values2 <- compute(train) i

newdata <- data.frame(v_int=as.integer(c(1,1,2,na))

v_num=as.numeric(c(1.1,na,2.2,na)),

v_fact=as.factor(c('one','one','one',na)), stringsasfactors = false))

is.na(newdata) 

colsums(is.na(newdata)) 

impute(newdata,object=values) 

impute(newdata,object=values2)

R語言處理缺失值

在處理資料過程中,避免不了會產生一些缺失值,如未填寫資料或者編碼錯誤等原因,用na表示缺失值。在r語言中,is.na 函式可以判斷元素是否是缺失值,從而返回邏輯值 true false 所以該函式將會返回和元資料集一樣大小的資料集。在判斷缺失值的過程中,需要注意以下兩點 既然缺失值可能無處不在,那麼...

R語言矩陣 缺失值處理

缺失值處理一般包括三步 1.識別缺失資料 2.檢查導致資料缺失的原因 3.刪除包含缺失值的例項或用合理的數值代替 插補 缺失值。x is.na x 1 true is.nan x 1 false is.infinite x 1 false 函式complete.cases 可用來識別矩陣或資料框中沒...

R 缺失值處理

假設有一組資料集如下 data data.frame y c 1,2,3,na,5,6 x1 c 6,na,4,3,2,1 x2 c 1,3,6,9,12,na na 即表示缺失值。在r中輸入該資料。判斷缺失資料 is.na data 統計缺失值個數 sum is.na data 檢視每個樣本資料是...