簡體   English   中英

用R中的列中位數進行插補

[英]Imputation with column medians in R

例如,如果我有矢量

vec <- c(3,4,5,NA)

我可以使用以下代碼將NA替換為向量中其他值的中位數:

vec[which(is.na(vec))] <- median(vec, na.rm = T)

但是,如果我有一個包含NA的矩陣,則在矩陣的所有列上應用相同的代碼不會使我返回矩陣,而只是返回每個矩陣列的中值。

mat <- matrix(c(1,NA,3,5,6,7,NA,3,4,NA,2,8), ncol = 3)
apply(mat, 2, function(x) x[which(is.na(x))] <- median(x, na.rm=T) )

#[1] 3 6 4

我如何用矩陣中位數代替NA來獲得矩陣? 這個問題是相似的: 用行均值替換NA值,但是我無法適應我的情況。

zoo有一個方便的函數( na.aggregate )將NA元素替換為指定的FUN

library(zoo)
apply(mat, 2, FUN = function(x) na.aggregate(x, FUN = median))
#      [,1] [,2] [,3]
#[1,]    1    6    4
#[2,]    3    7    4
#[3,]    3    6    2
#[4,]    5    3    8

或如@ G.Grothendieck所評論的, na.aggregate可以直接應用於matrix

na.aggregate(mat, FUN = median)

return(x)添加為apply中函數的最后一行將解決該問題。

> apply(mat, 2, function(x){
    x[which(is.na(x))] <- median(x, na.rm=T)
    return(x)
  })
     [,1] [,2] [,3]
[1,]    1    6    4
[2,]    3    7    4
[3,]    3    6    2
[4,]    5    3    8

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM