【问题标题】:Replace missing values with Mean and Mode (Custom function)用均值和众数替换缺失值(自定义函数)
【发布时间】:2018-03-09 15:40:46
【问题描述】:

我需要构建一个函数,该函数使用均值替换连续/整数变量的缺失值,并使用模式替换分类变量的缺失值。

数据来自信用筛选数据集

X <- read.csv("https://archive.ics.uci.edu/ml/machine-learning-databases/credit-screening/crx.data", header = FALSE, na.strings = '?')

数据集的第一列是因子类型,第二列和第三列是数字.....

我建立了一个模式函数

mode_function <- function(x) {
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}

按预期工作。

我在数据集上使用的整体功能是

broken <- function(data){
  for(i in 1:ncol(data)){
    if(is.factor(data[,i])){
      data[is.na(data[,i]),i] <- mode_function(data[,i])
    }
    else{
      data[is.na(data[,i]),i] <- mean(data[,i], na.rm = TRUE)
    }
  }
  return(data)
}

问题:我运行了这个函数,我的数据集中没有任何变化。我仍然有与函数运行前相同数量的缺失值。

函数外的这一行按预期工作。处理均值的代码也是如此。

data[is.na(data[,i]),i] <- mode_function(data[,i])

但是一旦我尝试使用我的函数来执行完全相同的操作,什么都没有发生。

【问题讨论】:

标签: r function dataframe


【解决方案1】:

“没有发生”的最可能原因是未能将结果分配给 R 名称/符号。也许试试这个:

 maybe_res <- broken(data)

检查一下:

> sapply(X, function(x) sum(is.na(x)))
 V1  V2  V3  V4  V5  V6  V7  V8  V9 V10 V11 V12 V13 V14 V15 V16 
 12  12   0   6   6   9   9   0   0   0   0   0   0  13   0   0 
> sapply( broken(X), function(x) sum(is.na(x)))
 V1  V2  V3  V4  V5  V6  V7  V8  V9 V10 V11 V12 V13 V14 V15 V16 
  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0 

我应该警告您,模式函数因提供的答案可能不是我们想要的而臭名昭著。

【讨论】:

    猜你喜欢
    • 2011-12-05
    • 2018-02-05
    • 2013-07-22
    • 2014-05-09
    • 2019-08-15
    • 2012-05-03
    • 2018-12-27
    • 1970-01-01
    相关资源
    最近更新 更多