本节要点:
- 缺失值处理
- 归一化
数据导入
methylation <- read.table("CHOL_methylation.data",header=T,row.names=1)
缺失值处理
若缺失值的个数大于10,忽略该元组
QC <- function(a,i){
numOfNA <- table(is.na(a[i,]))[1]
if (numOfNA>=9){
#看非空是否大于等于9是因为我用table(),如果有的元组没有空值返回就是NA
#另外 空值大于10就说明非空小于等于9哈 一个等号的差别关乎一个元组呢
return(a[i,])
}else{
return(NA)
}
}
remethy <- matrix(nrow=1,ncol=19)
remethy <- as.data.frame(remethy)
remethy <- remethy[-1,]
#创造一个空数据框 我喜欢这样 因为可以rbind()
for (i in 1:1000){
qc <- QC(methylation,i)
if (!all(is.na(qc))){
remethy <- rbind(remethy,qc)
}
}
剩余元组中的缺失值用相应列的平均值代替
FillNA <- function(x){
avg <- mean(na.omit(x))
x[is.na(x )]<- avg
x
}
filledmethy <- remethy
for (i in 1:19){
filledmethy[,i] <- FillNA(remethy[,i])
}
输出处理后数据的行数和列数
dim(filledmethy)
归一化
最小-最大规范化方法
将每一个样本中的DNA甲基化数据规范化到[0,1]
normalization <- function(x){
x <- as.numeric(x)
M <- as.numeric(max(x))
m <- as.numeric(min(x))
n <- (x-m)/(M-m)
n
}
normedmethy <- filledmethy
for (i in 1:19){
normedmethy[,i] <- normalization(filledmethy[,i])
}
截图给出11-15个样本中前20个探针的数据
normedmethy[1:20,11:15]