本文主要是介绍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)]
#其实这些都是平时做数据处理时可以预先做的一些简单处理,还是非常实用的,但是我只是针对自己的数据编写的,如果数据不一样会出现一些小问题,只要稍微做下修改应该就没啥问题,有好办法欢迎来贴,只有互相学习才能更快的提升自己!
这篇关于R语言-数据预处理的一些实用(万能)办法:缺失值、数据重复、共线性等等的处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!