R语言-数据预处理的一些实用(万能)办法:缺失值、数据重复、共线性等等的处理

#在这里呢主要是想介绍一下数据预处理的一些常用问题:缺失值、数据重复、共线性等等的处理办法,自己写了一点代码,希望能帮助到有需要的朋友
#删除缺失比例达到20%的列,并打印出删除的列
fun1<-function(data,naratio=0.2){
  na_ratio<-apply(is.na(data),2,sum)/nrow(data)#求每列的缺失比例
  x<-data[,na_ratio<naratio]#保留缺失比例小于0.2的列
  print(colnames(data)[na_ratio>=naratio])#打印出被删除的列变量名
  return(x)
}

#或者可以直接利用R中的DMwR包来进行处理
library(DMwR)
data4<-data[-manyNAs(data,nORp=0.2),] #删除缺失比例达到20%(默认0.2)的行(如果想删除列先将矩阵进行转置就行了)

#删除某列众数比例达到50%的列,并打印出删除的列
fun2<-function(data){
  fun_const<-function(x){ 
    xn1<-which.max(table(x))#找出每列的众数
    return(x[xn1])
  }
  constant1<-as.numeric(apply(data,2,fun_const))
  fun_i<-function(data,constant1,i){
    zero_ratio<-sum(data[,i]==constant1[i])/nrow(data)
    return(zero_ratio)
  }
  zero_ratio1<-numeric(ncol(data))
  
  for(i in 1:ncol(data)){
    zero_ratio1[i]<-fun_i(data,constant1,i)
  }
  data1<-data[,zero_ratio1<0.5]
  print(colnames(data)[zero_ratio1>=0.5])
  return(data1)
}

#删除相关系数达到0.9的列,并打印出删除的列
fun3<-function(data,corr=0.9){
  xc<-cor(data);diag(xc)=0
  lc<-which(abs(xc)>=corr,arr.ind = T)
  if(length(lc)!=0){
    lc1<-lc[lc[,1]<lc[,2],]
    if(is.matrix(lc1)) lcd<-unique(lc1[,2]) else lcd<-lc1[2]
    x<-data[,-lcd]
    print(colnames(data)[lcd])
    return(x)
  } else return(data)
}

#删除列名重复的情形(可能列名只是差个空格或者其他符号,但其实是同一个变量)
col_name<-colnames(data)
col_name1<-gsub(" ","",col_name)#删掉变量名中的空格
new_col<-unique(col_name1)
data1<-data[,match(new_col,col_name1)]

#其实这些都是平时做数据处理时可以预先做的一些简单处理,还是非常实用的,但是我只是针对自己的数据编写的,如果数据不一样会出现一些小问题,只要稍微做下修改应该就没啥问题,有好办法欢迎来贴,只有互相学习才能更快的提升自己!





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Trisyp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值