用Mean和Mode替换缺失值(自定义功能)

时间:2017-09-28 02:17:11

标签: r function dataframe

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

数据来自信用筛选数据集

public bool CurrentAccountDepositDetails(Current_Account_Deposit_Details current_Account_Deposit_Details)
{
    int j = Convert.ToInt32(current_Account_Deposit_Details.Account_Number);

    using (MyDbContext  ctx = new MyDbContext(ConnectionString))
    {

        var foundAccount = ctx.Current_Account_Details.firstOrDefault(x=> x.Account_Number == j);

        using (var dbContextTransaction = ctx.Database.BeginTransaction()) 
        { 
           var acctDetails= ctx.Current_Account_Details.firstOrDefault(x=> x.Account_number =depositDetails.Account_Number );
           acctDetails.Account_Balance ==  acctDetails.Account_Balance +current_Account_Deposit_Details.Amount ;

           if(acctDetails!=null)
           {
                ctx.SaveChanges();
                dbContextTransaction.Commit();
                //do your deposits here similar to accdetails
                //ctx.Current_Account_Dposit()storedprocedure if you included while creating db file
            }               
            else
            {
                dbContextTransaction.Rollback();
                return false;
            }
        }

    }
}

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

我建立了一个模式功能

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)
}

但是一旦我尝试使用我的函数执行完全相同的操作,就不会发生任何事情。

1 个答案:

答案 0 :(得分:0)

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

 maybe_res <- broken(data)

Chaeck:

> 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 

我应该警告你,模式功能因提供可能不符合要求的答案而臭名昭着。